valor texto obtener nodos herramienta expresión evaluar debe conjunto como buscar atributo aprender xml xpath

xml - texto - Extraer el valor del nodo de atributo a través de XPath



xpath list of elements (6)

@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

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

Un archivo XML de muestra es:

<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>

Hasta ahora tengo esta cadena XPath:

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

Solo devuelve 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 la salida:

Child_2 Child_4 Child_1 Child_3


Como se respondió anteriormente:

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

solo emitirá el atributo de name de los 4 nodos child pertenecen al Parent especificado por su predicado [@id=1] . Luego, deberá cambiar el predicado a [@id=2] para obtener el conjunto de nodos child para el siguiente principal.

Sin embargo, si ignora el nodo principal por completo y usa:

//child/@name

puede seleccionar el atributo de name de todos child nodos child de una sola 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"


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

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


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

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

La función fn:string() devolverá el valor de su argumento como xs:string . En caso de que su argumento sea un atributo, por lo tanto devolverá el valor del atributo como xs:string .


//Parent/Children[@ Attribute=''value'']/@Attribute

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


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

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