我试图通过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 。
答案 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仅输出字符串值第一个节点。