*NIX CLI:过滤器、查询 XML 属性和显示

*NIX CLI: Filter, Query XML Attribute and Display

给定文件:

/// @file test.xml
<xml-fragment>
  <string name="foo" value="bar"/>
</xml-fragment>

要过滤的路径 xml-fragment/string 和属性&值 name="foo",以及要查询的属性 value,我如何 应该 "bar"?

使用 xmlstarlet,我有这个:

xmlstarlet sel -t -m '/xml-fragment/string[attribute::name="foo"]' \
                  -v 'attribute::bar' test.xml

这似乎可行,但我想知道是否有更好的方法?

我什至不需要使用 xmlstarlet;我之前尝试过 xmllintxsltprocxpath,但无法使它们起作用。

我不确定这是否是 "better",但您可以将 -v 与整个 xpath 一起使用。您也可以使用 @ abbreviated syntax.

示例(在 windows 中测试;引号可能需要更改)

xmlstarlet sel -t -v "/xml-fragment/string[@name='foo']/@value" test.xml

您列出的任何其他工具也应该可以使用。如果您只是获得一个值,xsltproc 可能有点矫枉过正。只要你是not using regex,就应该没问题。