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
.