如何使用XML starlet的“view”选项?

时间:2012-12-06 15:29:28

标签: xml xpath xmlstarlet

我试图通过XPath从XML中选择值。我想知道为什么 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被卡住了。

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

1 个答案:

答案 0 :(得分:2)

实际上,-v表示-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被解释为-v的XPath表达式,因此这意味着:for-each数据节点,在test.xml下输出名为tmp的节点的值根节点。并且它希望输入XML来自标准输入,因此它似乎会卡住。

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


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