-1

Have such a XML file.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model-response-list xmlns="http://www.ca.com/spectrum/restful/schema/response" total-models="922" throttle="922" error="EndOfResults">
    <model-responses>
        <model mh="0x1058905">
            <attribute id="0x1006e">prod-vpn-gw-v01.e-x.com</attribute>
        </model>
        <model mh="0x1058907">
            <attribute id="0x1006e">prod-storage-san-z01-ssh.e-x.com</attribute>
        </model>
        <model mh="0x1058900">
            <attribute id="0x1006e">test-vpn-gw-v01</attribute>
        </model>
    </model-responses>
</model-response-list>

I need to print a list:

0x1058905 prod-vpn-gw-v01.e-x.com
0x1058907 prod-storage-san-z01-ssh.e-x.com
0x1058900 test-vpn-gw-v01

I tried with:

xmllint --xpath "//*[local-name()='model']/*[local-name()='attribute']/text()" devices.xml

but its only for the name, really no idea how to use it with an and in it to get also the 0x... mh value.

Can some one help? Thank You.

Daniel Haley
  • 51,389
  • 6
  • 69
  • 95
Bomber
  • 13
  • 1

2 Answers2

0

xmllint isn't the idea tool for this (it only support xpath 1.0), but if you must use it, try the following; it should get you close enough:

xmllint --xpath ".//*[local-name()='model']/@mh | .//*[local-name()='model']//*/text()"  devices.xml

Output:

 mh="0x1058905"
prod-vpn-gw-v01.e-x.com
 mh="0x1058907"
prod-storage-san-z01-ssh.e-x.com
 mh="0x1058900"
test-vpn-gw-v01
Jack Fleeting
  • 24,385
  • 6
  • 23
  • 45
0

Another option would be to use xmlstarlet to match the model elements and then use concat() to output the desired values...

xmlstarlet sel -t -m "//_:model" -v "concat(@mh,' ',_:attribute)" -n devices.xml

outputs...

0x1058905 prod-vpn-gw-v01.e-x.com
0x1058907 prod-storage-san-z01-ssh.e-x.com
0x1058900 test-vpn-gw-v01

Note: I'm using version 1.6.1 of xmlstarlet. Not all versions support "_" for a namespace prefix. (Supported in versions 1.5.0+)

See http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139652416 for more info on the "sel" command of xmlstarlet.

Daniel Haley
  • 51,389
  • 6
  • 69
  • 95