user2387280
user2387280

Reputation: 95

Get value of an attribute from xml for multiple occurrences using xmllint

I want to get value of conn of abc whose name is 3 i.e conn3

<abc name="1">
    <properties conn="conn1"/>
</abc>
<abc name="2">
    <properties conn="conn2"/>
</abc>
<abc name="3">
    <properties conn="conn3"/>
</abc>

currently i am doing

echo 'cat //abc/properties/@conn' | xmllint --shell "test.xml"

but it is returning conn1,conn2,conn3

I am trying with

echo 'cat //abc[@name='1']/properties/@conn' | xmllint --shell "test.xml"

but it is not returning anything

Can you please suggest where i am doing wrong. Note:Xpath not supported

Upvotes: 3

Views: 9190

Answers (2)

user2387280
user2387280

Reputation: 95

Finally issue was with single inverted comma(') below command worked for me. I don't know the reason, came to know by hit and try :)

Please comment if you know the reason behind it.

echo 'cat //abc[@name="1"]/properties/@conn' | xmllint --shell "test.xml"

Note: Above mentioned XML is only sample actual XML where I want to run is complex structure.

Upvotes: 1

fedorqui
fedorqui

Reputation: 289495

Just use xmllint normally, without pipes:

$ xmllint --xpath 'string(//abc[@name='1']/properties/@conn)' xml_file
conn1

See string() is used to get the value of an attribute, as described in Getting attribute using XPath.

Upvotes: 0

Related Questions