我在 cygwin 上使用 xmllint 的交互式 shell。我想计算节点的数量,但 xmllint 的行为似乎并不符合我的预期:
$> cat test.xml
<?xml version="1.0"?>
<result>
<node>
<item/>
<item/>
<item/>
<item/>
<item/>
</node>
</result>
$> xmllint --shell test.xml
/ > cat count(/result/node/item)
count(/result/node/item) is a number
它说这是一个数字,但它并没有以我在网络搜索中看到的方式显示该数字:
count(/result/node/item) is a number : 5
这里出了什么问题?
$> xmllint --version
xmllint: using libxml version 20706
compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib
答案1
我意识到@Stephane 在评论中提到了这一点,但我遇到了这种技术,并打算在看到他对相同解决方案的评论之前发布这个答案。不确定这样做的礼仪,但这就是我发现的。如果在别人的评论上发表答案不合适,LMK 和我可以删除这个答案。
解决方案
您需要使用xpath
xmllint 中的命令来显示从函数返回的结果count
。
$ xmllint --shell test.xml
/ > cat
<?xml version="1.0"?>
<result>
<node>
<item/>
<item/>
<item/>
<item/>
<item/>
</node>
</result>
/ > xpath count(/result/node/item)
Object is a number : 5
/ >
在这个网站上找到了答案:在 xmllint Shell 中使用 XPath 表达式。