Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

xmlstarlet select value

Tags:

This is the xml-data:

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

I am trying to find property2 of the item where identifyer has value 1234. I can select the data:

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

Two types of output would be desirable:

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

And:

$ xmlstarlet <some magic>
qwerty
like image 780
joepd Avatar asked Sep 28 '12 12:09

joepd


1 Answers

The key is to start from the ITEM node, not the identifyer:

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

Then you can pick out the bits you want:

$ 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 
like image 108
npostavs Avatar answered Sep 18 '22 15:09

npostavs