提问人:miken32 提问时间:6/17/2017 更新时间:6/17/2017 访问量:89
打印多个匹配的元素名称
Print multiple matching element names
问:
我正在尝试打印多个元素的名称,但我只能说服 XPath 输出一个。
给定此 XML:
<xml>
<foob>931</foob>
<arba>478</arba>
<zfoo>892</zfoo>
</xml>
我尝试这个并得到:foob
name(//*[contains(name(), "foo")])
我尝试这个并得到一个关于无效表达式的错误:
//*[contains(name(), "foo")]/name()
虽然这工作正常:
//*[contains(name(), "foo")]/text()
我在命令行上,并且尝试了两者(来自 Perl 的 XML-XPath 模块)并获得了相同的结果。xmllint
xpath
我怎样才能同时获得和退回?foob
zfoo
答:
2赞
kjhughes
6/17/2017
#1
在 XPath 1.0 中,您的第一个 XPath
name(//*[contains(name(), "foo")])
结果只是因为 XPath 1.0 仅将所选节点集的第一个成员传递给 。要获取 和 的列表,您必须使用托管 XPath 调用的语言(XSLT、Python、Java 等)遍历所选节点集。"foob"
name()
"foob"
"zfoo"
在 XPath 2.0 中,您的第二个 XPath
//*[contains(name(), "foo")]/name()
可以单独通过 XPath 直接获取列表。"foob"
"zfoo"
评论
0赞
miken32
6/17/2017
好吧,我不知道第二个是 XPath 2.0;支持它的 CLI 解析器似乎并不多。将不得不用 Python 或 PHP 编写一些东西。谢谢!
评论