0
$ xmlstarlet sel -t -c "//str[@name="id" and .="http://localhost:8080/index.html"]/../str[@name="doc-norm"]"/value results.xml

我的理解是它xmlstarlet不完全支持 xpath 表达式。顺便说一句,还有其他命令行工具吗?

<doc>
    <str name="id">http://localhost:8080/index.html</str>
    <str name="doc-norm">6</str>
</doc>
4

1 回答 1

2

您是否试图6从您的示例中返回?

我没有 xmlstarlet 来测试这个,但试试这个 XPath:

//*[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']

这应该返回一个str元素的值,该元素的name属性值为 ,doc-norm当其父元素的子str元素的id属性值为 时http://localhost:8080/index.html。(我希望这是有道理的!)

我还应该补充一点,如果您知道父元素的级别是什么,请尽量避免使用//. 类似的东西/doc[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']会更有效率。

更新

我下载了 xmlstartlet 进行测试,它工作正常,但是它返回了整个str元素。如果您只想要文本,请添加text()到 XPath 的末尾:

//*[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']/text()

于 2011-05-20T20:00:09.723 回答