我正在尝试从 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
卡住了。
所以,我的问题是如何正确使用选项视图。
我正在尝试从 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
卡住了。
所以,我的问题是如何正确使用选项视图。
实际上,-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 仅输出第一个节点的字符串值。