打印多个匹配的元素名称

Print multiple matching element names

提问人:miken32 提问时间:6/17/2017 更新时间:6/17/2017 访问量:89

问:

我正在尝试打印多个元素的名称,但我只能说服 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 模块)并获得了相同的结果。xmllintxpath

我怎样才能同时获得和退回?foobzfoo

xml xpath

评论


答:

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 编写一些东西。谢谢!