Dados estos datos:
<root>
<A>
<A1 id="1">
<elem>apple</elem>
</A1>
</A>
<B>
<B1 id="2">
<elem>banana</elem>
</B1>
</B>
<C id="3">
<elem>grapes</elem>
<C1></C1>
</C>
</root>
¿Cómo averiguo todos los elementos principales posibles del elemento elem ? Hasta ahora, puedo averiguarlo usando la opción -m por:
$ xmlstarlet sel -t -m '//elem/..' -v 'concat(name(),"=",@id)' -n input3.xml
A1=1
B1=2
C=3
$
Pero, ¿cómo hago lo mismo usando una expresión xpath con -v? Por ejemplo, solo puedo referirme al atributo de identificación del padre, pero no al nombre del elemento principal:
$ xmlstarlet sel -t -v '//elem/../@id' input3.xml
1
2
3
$
Podrías hacerlo:
xmlstarlet sel -t -v "name(//elem/..)" input3.xml
pero eso solo le dará el nombre de la primera coincidencia (xmlstarlet es un procesador XPath 1.0).
La única forma de hacer esto, como encontraste, es haciendo coincidir ( -m
) primero:
xmlstarlet sel -t -m "//elem/.." -v "name()" -n input3.xml
aunque prefiero un XPath ligeramente diferente:
xmlstarlet sel -t -m "//*[elem]" -v "name()" -n input3.xml
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras