2010-06-27 7 views
1

Ceci est un morceau de mon document XML:corriger cette expression XPath s'il vous plaît

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
<mfVictor> 
<decal> 
    <company>Victor</company> 
    <title>Wood Horn with Blue Background</title> 
    <image> 
     <url>victor01.jpg</url> 
     <width>60</width> 
     <height>60</height> 
     <name>Wood Horn Blue Background</name> 
     <link></link> 
    </image> 
    <price>$15.00</price> 
    <instock>In Stock</instock> 
    <notes>none</notes> 
    </decal> 
</mfVictor> 
</catalog> 

J'ai une fonction qui génère une liste du texte de chaque élément « titre ». Alors, dans la liste de chaque élément de la liste, je veux naviguer vers la "décalcomanie" et accéder à tous ses enfants. Jusqu'à présent j'ai ceci:

//decal[contains(.,\'"+itemName+"\')] 

où le itemName est this.innerHTML passé à la fonction. On dirait que la décalcomanie est accessible parce que dans le fichier console.log je peux voir un objet XML avec une longueur de 1. Mais je n'arrive pas à comprendre comment accéder aux fils de "decal" ou aux frères et soeurs de "title".

Merci d'avoir lu.

Répondre

1

Si vous devez sélectionner un autocollant basé sur son titre, je préférerais les XPath suivantes:

//decal/title[contains(.,\'"+itemName+"\')]/parent::node() 
//decal/title[contains(.,\'"+itemName+"\')]/.. 
//decal[title[contains(.,\'"+itemName+"\')]] 

pour sélectionner un frère du titre de l'autocollant que vous avez sélectionné, vous pouvez utiliser

//decal/title[contains(.,\'"+itemName+"\')]/following-sibling::* 

Si vous voulez que tous les enfants de l'autocollant que vous sélectionnez, vous pouvez utiliser (peut-être vous en avez besoin)

//decal[title[contains(.,\'"+itemName+"\')]]/child::* 

ou mieux, si vous avez le titre complet

//decal[title[text()=\'"+itemName+"\']]/child::* 

Avec le support carré vous instruira l'analyseur pour parcourir l'arborescence XML pour faire une sélection en fonction de la condition que vous spécifiez, mais sans changer le nœud de contexte. Pensez aux crochets comme une bande de caoutchouc, une fois que le test qu'il contient est satisfait, l'analyseur revient au noeud de départ et évalue le reste de l'expression xpath. Les deux premiers exemples sont un

+0

Cela explique cela. J'avais besoin du dernier de vos exemples. Merci! – Troy

0

Je pense que vous voudrez peut-être //decal[contains(./Title, Corne bois avec fond bleu ')]

Cela devrait vous donner le nœud autocollant avec un nœud enfant nommé « titre » qui contient les text 'Corne en bois avec fond bleu'

Pour accéder aux frères et sœurs de l'élément Titre, vous devez sélectionner les enfants du noeud que cela renvoie. (Il est en fait retourner le nœud autocollant, pas le nœud de titre.)

Questions connexes