Comment puis-je extraire la valeur d'un nœud d'attribut via XPath?
Un exemple de fichier XML est:
<parents name='Parents'>
<Parent id='1' name='Parent_1'>
<Children name='Children'>
<child name='Child_2' id='2'>child2_Parent_1</child>
<child name='Child_4' id='4'>child4_Parent_1</child>
<child name='Child_1' id='3'>child1_Parent_1</child>
<child name='Child_3' id='1'>child3_Parent_1</child>
</Children>
</Parent>
<Parent id='2' name='Parent_2'>
<Children name='Children'>
<child name='Child_1' id='8'>child1_parent2</child>
<child name='Child_2' id='7'>child2_parent2</child>
<child name='Child_4' id='6'>child4_parent2</child>
<child name='Child_3' id='5'>child3_parent2</child>
</Children>
</Parent>
</parents>
Jusqu'à présent, j'ai cette chaîne XPath:
//Parent[@id='1']/Children/child[@name]
Il ne renvoie que des child
éléments, mais j'aimerais avoir la valeur de l' name
attribut.
Pour mon exemple de fichier XML, voici ce que j'aimerais que la sortie soit:
Child_2
Child_4
Child_1
Child_3
Réponses:
Votre original
child[@name]
signifie un élémentchild
qui a un attributname
. Tu veuxchild/@name
.la source
Pour obtenir uniquement la valeur (sans les noms d'attribut), utilisez
string()
:string(//Parent[@id='1']/Children/child/@name)
La fonction fn: string () renverra la valeur de son argument comme
xs:string
. Dans le cas où son argument est un attribut, il retournera donc la valeur de l'attribut commexs:string
.la source
xqilla
il fallait appelerxs:string
. Je me demande pourquoi.xs
est probablement le préfixe d'espace de noms pour les fonctions XPath. Ils ne sont donc pas mélangés avec les autres.Tu devrais utiliser
//Parent[@id='1']/Children/child/data(@name)
Les attributs ne peuvent pas être sérialisés, vous ne pouvez donc pas les renvoyer dans un résultat au format xml. Ce que vous devez faire est d'obtenir les données de l'attribut à l'aide de la fonction data ().
la source
Comme répondu ci-dessus:
ne sortira que l'
name
attribut des 4child
nœuds appartenant auParent
spécifié par son prédicat[@id=1]
. Vous devrez ensuite modifier le prédicat[@id=2]
pour obtenir l'ensemble dechild
nœuds pour le prochainParent
.Cependant, si vous ignorez
Parent
complètement le nœud et utilisez:vous pouvez sélectionner l'
name
attribut de tous leschild
nœuds en une seule fois.la source
C'est le cas qui peut être utilisé lorsque l'élément a 2 attributs et que nous pouvons obtenir un attribut à l'aide d'un autre.
la source
@ryenus, vous devez parcourir le résultat. Voici comment je le ferais en vbscript;
la source
pour tout xml avec espace de noms, utilisez local-name ()
la source