web-dev-qa-db-fra.com

Xpath: sélectionner un nœud basé sur une condition (avec local-name ())

La question est assez stupide, mais je suis complètement coincé. Je veux extraire les nœuds enfants d'un nœud en fonction d'une condition. Le XML est le suivant:

<a> 
 <aCode>aaa</aCode>
 <aValue>bbb</aValue>
</a>

L'expression est évidente: //a[aCode='aaa']

Mais je ne sais pas comment je devrais le changer si c'est avec des espaces de noms et je dois utiliser local-name(). J'ai testé les éléments suivants et cela donne une erreur d'analyse:

/*[local-name()='a'][[local-name()='aCode']='aaa']

Quelqu'un at-il une idée de ce que je dois faire?

24
gisly

Vous vouliez probablement dire

//*[local-name()='a'][*[local-name()='aCode']='aaa']
45
choroba

Essayez ceci

/a/aCode[text()='aaa']

ou

//*[local-name() = 'aCode' and text() = 'aaa']

Vous avez utilisé // au mauvais endroit.

12
Cylian

Celui-ci fonctionne:

//*[local-name()='a'][*[local-name()='acode' and text()='a2']]

et aussi celui-ci:

//*[local-name()='a'][aCode[text()='a2']]
1
karl368