我想通过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
卡住了。
所以,我的问题是如何正确使用选项查看。
我想通过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
卡住了。
所以,我的问题是如何正确使用选项查看。
实际上,-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.xml
的tmp
根节点之下。它期望输入XML来自标准输入,因此它似乎会卡住。
通过使用-C
选项,您始终可以将任何sel
命令行的含义指定为XSLT。
*在最近版本xmlstarlet(1.3+)-v
将输出在由一个新行分开的节点列表的每个节点值的,而不是XSLT定义其中value-的唯一的输出的字符串值第一个节点。
那么,*匹配*,但是,它确实相当于for-each。 –