Extrae el valor del nodo de atributo a través de XPath

¿Cómo puedo extraer el valor de un nodo de atributo a través de XPath?

Un archivo XML de muestra es:

   child2_Parent_1 child4_Parent_1 child1_Parent_1 child3_Parent_1     child1_parent2 child2_parent2 child4_parent2 child3_parent2    

Hasta ahora tengo esta cadena XPath:

 //Parent[@id='1']/Children/child[@name] 

Devuelve solo elementos child , pero me gustaría tener el valor del atributo de name .

Para mi archivo XML de muestra, esto es lo que me gustaría que fuera el resultado:

 Child_2 Child_4 Child_1 Child_3 

 //Parent[@id='1']/Children/child/@name 

Su child[@name] original child[@name] significa un elemento child que tiene un name atributo. Quieres child/@name .

Para obtener solo el valor (sin nombres de atributos), use string() :

string( //Parent[@id='1']/Children/child/@name )

El fn: string () fucntion devolverá el valor de su argumento como xs:string . En caso de que su argumento sea un atributo, devolverá el valor del atributo como xs:string .

Deberías usar //Parent[@id='1']/Children/child/data(@name)

Los atributos no se pueden serializar por lo que no puede devolverlos en un resultado de apariencia xml. Lo que debe hacer es obtener los datos del atributo utilizando la función data ().

Como se respondió anteriormente:

 //Parent[@id='1']/Children/child/@name 

solo emitirá el atributo de name de los 4 nodos child pertenecen al elemento principal especificado por su predicado [@id=1] . Luego tendrá que cambiar el predicado a [@id=2] para obtener el conjunto de nodos child para el próximo Parent .

Sin embargo, si ignoras por completo el nodo Parent y usas:

 //child/@name 

puede seleccionar el atributo de name de todos child nodos child de una vez.

 name="Child_2" name="Child_4" name="Child_1" name="Child_3" name="Child_1" name="Child_2" name="Child_4" name="Child_3" 
 //Parent/Children[@ Attribute='value']/@Attribute 

Este es el caso que se puede usar cuando el elemento tiene 2 atributos y podemos obtener el atributo con la ayuda de otro.

@ryenus, necesitas recorrer el resultado. Así es como lo haría en vbscript;

 Set xmlDoc = CreateObject("Msxml2.DOMDocument") xmlDoc.setProperty "SelectionLanguage", "XPath" xmlDoc.load("kids.xml") 'Remove the id=1 attribute on Parent to return all child names for all Parent nodes For Each c In xmlDoc.selectNodes ("//Parent[@id='1']/Children/child/@name") Wscript.Echo c.text Next