2012-12-06 32 views
1

我想通过XPath从XML中选择值。我不知道为什么xmlstarlet sel -t -m //data -v "." /tmp/test.xml确实工作和xmlstarlet sel -t -m //data /tmp/test.xml如何使用XML starlet的“查看”选项?

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

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

回答

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被解释为XPath表达式-v所以这意味着:对于-每个数据节点,输出的值的节点命名test.xmltmp根节点之下。它期望输入XML来自标准输入,因此它似乎会卡住。

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


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

+0

那么,*匹配*,但是,它确实相当于for-each。 –