2011-02-22 2 views
0

Je voudrais sélectionner le noeud d'achat avec l'attribut pgnr, qui a la valeur d'un autre attribut pgnr, startig avec "KEY", concaténé avec "c".Comment sélectionner un noeud référencé par un autre noeud avec XPath?

Exemple:

<root> 
<purchact hhid="xxx"> 
    <purchase pgnr="41"> 
    <purchvalues field_name="Number" field_value="1"/> 
    </purchase> 
    <purchase pgnr="KEY9802"> 
    <purchvalues field_name="Number" field_value="2"/> 
    </purchase> 
<purchase pgnr="9802c"> 
    <purchvalues field_name="Number" field_value="3"/> 
    </purchase> 
</purchact> 
</root> 

Dans ce cas, je suis à la recherche de l'achat-noeud avec le pgnr attribut « 9802c », parce que l'achat-noeud avec le pgnr attribut commençant par « KEY » a comme les caractères suivants "9802".

J'ai essayé

root/purchact/purchase[@pgnr=concat(substring-after(@pgnr, "KEY"), "c")] 

mais il ne fonctionne pas.

Quelqu'un pourrait-il aider? Merci beaucoup!

+0

Cochez ma réponse pour sélectionner correctement tous les éléments souhaités. –

Répondre

1
root/purchact/purchase[ 
    @pgnr = concat(
     substring-after(
      ../purchase[ 
       contains(@pgnr, 'KEY') 
       ]/@pgnr, 
      'KEY' 
      ) 
     , 'c') 
    ] 
+0

C'était tout. Merci beaucoup! – Guenter

+0

@Guenter, n'oubliez pas d'accepter et upvote la réponse alors. Vous êtes les bienvenus. – Flack

+0

désolé, je suis nouveau ici. Accepté, mais n'a pas pu être upvote en raison de peu de réputation – Guenter

2

Cette expression XPath:

root/purchact/purchase[ 
    @pgnr[substring(.,string-length()) = 'c'] 
][ 
    concat(
     'KEY', 
     substring-before(
     @pgnr, 
     'c' 
    ) 
    ) = ../purchase/@pgnr 
] 

Signification: un élément purchase ayant un attribut @pgnr se terminant par 'c' et pour wich il y a au moins un autre @pgnr attribut appartenant à un élément frère purchase et étant égal à la concaténation de 'KEY' et la chaîne du @pgnr donné avant 'c'.

+0

+1 pour une meilleure réponse. – Flack

Questions connexes