1

我正在尝试从 XML 中选择值XPath。我想知道为什么有效而无效xmlstarlet sel -t -m //data -v "." /tmp/test.xml xmlstarlet sel -t -m //data /tmp/test.xml

我知道该选项-v意味着view。但是xmlstarlet sel -t -m //data -v /tmp/test.xml卡住了。

所以,我的问题是如何正确使用选项视图

4

1 回答 1

2

实际上,-v表示value-of-m表示for-each。这些引用XSLT定义*,因为 sel 子命令只是生成一个 XSLT 文档并在输入上运行它。

xmlstarlet sel -t -m //data /tmp/test.xml

这是一个没有主体的循环,所以没有输出。

xmlstarlet sel -t -m //data -v /tmp/test.xml

这里/tmp/test.xml被解释为 XPath 表达式,-v因此这意味着:对于每个数据节点,输出根节点test.xml下命名的节点的值tmp。并且它期望输入 XML 来自标准输入,因此它似乎被卡住了。

通过使用该选项,您始终可以将任何sel命令行的含义理解为 XSLT 。-C


* 在最新版本的 xmlstarlet (1.3+)-v中,将输出由换行符分隔的节点列表中的每个节点的 value-of,而不是 XSLT 定义中 value-of 仅输出第一个节点的字符串值。

于 2012-12-06T23:44:08.610 回答