鉴于文件:
/// @file test.xml
<xml-fragment>
<string name="foo" value="bar"/>
</xml-fragment>
要过滤的路径xml-fragment/string
和属性&amp; value name="foo"
以及要查询的属性value
, 我应该如何获得{{1} }}?
使用"bar"
,我有:
xmlstarlet
似乎有效,但我想知道是否有更好的方法?
我甚至不需要使用xmlstarlet sel -t -m '/xml-fragment/string[attribute::name="foo"]' \
-v 'attribute::bar' test.xml
;我之前尝试过xmlstarlet
,xmllint
和xsltproc
,但无法使用这些功能。
答案 0 :(得分:1)
我不确定这是否“更好”,但你可以在整个xpath中使用-v
。您还可以使用@
abbreviated syntax。
示例(在Windows中测试;可能需要更改引号)
xmlstarlet sel -t -v "/xml-fragment/string[@name='foo']/@value" test.xml
您列出的任何其他工具也应该有效。如果您只是获得一个值,xsltproc
可能会有点过分。只要你是not using regex,你应该没问题。