xml xmlstarlet

xmlstarlet selecciona el valor



(1)

Estos son los datos xml:

<DATA VERSION="1.0"> <TABLES> <ITEM> <identifyer V="1234"></identifyer> <property1 V="abcde"></property1> <Property2 V="qwerty"></property2> </ITEM> <ITEM> <identifyer V="5678"></identifyer> <Property1 V="zyxwv"></property1> <Property2 V="dvorak"></property2> </ITEM> </TABLES> </DATA>

Estoy tratando de encontrar la property2 del elemento donde el identifyer tiene un valor 1234 . Puedo seleccionar los datos:

$ xmlstarlet sel -t -c "/DATA/TABLES/ITEM/identifyer [@V=1234]" test.xml <identifyer V="1234"/>

Dos tipos de salida serían deseables:

$ xmlstarlet <some magic> <identifyer V="1234"></identifyer> <property1 V="abcde"></property1> <Property2 V="qwerty"></property2>

Y:

$ xmlstarlet <some magic> qwerty


La clave es comenzar desde el nodo ITEM, no desde el identificador:

$ xmlstarlet sel -t -c "/DATA/TABLES/ITEM[identifyer/@V=1234]" test.xml <ITEM> <identifyer V="1234"/> <property1 V="abcde"/> <Property2 V="qwerty"/> </ITEM>

A continuación, puede seleccionar los bits que desee:

$ xmlstarlet sel -t -c "/DATA/TABLES/ITEM[identifyer/@V=1234]/*" test.xml <identifyer V="1234"/><property1 V="abcde"/><Property2 V="qwerty"/> $ xmlstarlet sel -t -v "/DATA/TABLES/ITEM[identifyer/@V=1234]/Property2/@V" test.xml qwerty