2009-06-03 6 views
0

Existe-t-il un moyen de créer une requête XPath qui trouve un noeud à une certaine position ET avec une certaine valeur d'attribut?Requête XPath respectant la position du noeud et la valeur de l'attribut

Tenir compte de l'échantillon XML suivant:

<Item Type="Book"> 
<!--1st Param node in a Book item is always the autors last name--> 
<Param Value="Updike" /> 
<!--2nd Param node in a Book item is always the autors first name--> 
<Param Value="John" /> 
<!--3rd Param node in a Book item is always the book title--> 
<Param Value="Toward the End of Time" /></Item> 

Maintenant, puis-je construire une seule requête qui trouve les éléments suivants:

Trouver tous les Point nœuds de type « Livre » où le 2ème Le noeud Param a une valeur de "John". Donc, je voudrais trouver tous les livres dont le nom du premier auteur est "John".

Notez que j'utilise .NET XPathDocument.

Répondre

2

Notez que j'utilise .NET XPathDocument.

Donc limité à XPath V1.

Vous pouvez inclure des chemins (relatifs et absolus) dans un prédicat. Donc, quelque chose comme:

//Item[@Type='Book'][./Param[2][@Value = 'John']] 

(. J'essayer d'éviter « // », car elle nécessite une recherche de l'ensemble DOM, mais ne peut pas fournir un meilleur axe sans plus de contexte)

+0

Votre expression ne se limite pas aux livres. –

+0

@Ben: Maintenant corrigé. – Richard

0

L'expression serait:

//Item/Param[2][@Value='John'] 
5

Qu'en est-il de l'obligation de n'avoir que l'article que sont les livres?

Essayez ceci:

/Item[@Type='Book'][Param[2][@Value='John']] 
Questions connexes