使用xmllint从xml中获取多次出现的属性值

时间:2015-08-10 14:05:33

标签: xml linux shell unix xmllint

我想得到abc的值,其名称为3,即conn3

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

目前正在做

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

但它正在返回conn1,conn2,conn3

我正在尝试

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

但它没有返回任何东西

你能告诉我哪里做错了。 Note:Xpath不支持

2 个答案:

答案 0 :(得分:1)

最后一个问题是我用命令wrok下面的单个倒置逗号(&#39;)。我不知道原因,通过命中来了解并尝试:)

如果您知道其背后的原因,请发表评论。

echo&#39; cat // abc [@name =&#34; 1&#34;] / properties / @ conn&#39; | xmllint --shell&#34; test.xml&#34;

注意:上面提到的xml只是我要运行的示例实际xml是复杂的结构。

答案 1 :(得分:0)

正常使用xmllint,不用管道:

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

请参阅string()用于获取属性的值,如Getting attribute using XPath中所述。