xml - 打印多个匹配的元素名称

标签 xml xpath

我正在尝试打印多个元素的名称,但我只能说服 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()

我在命令行上尝试了 xmllintxpath(来自 Perl 的 XML-XPath 模块),得到了相同的结果。

我怎样才能同时返回foobzfoo

最佳答案

使用 XPath 1.0,您的第一个 XPath,

name(//*[contains(name(), "foo")])

结果只是“foob”,因为XPath 1.0仅将所选节点集的第一个成员传递给name()。要获取 "foob""zfoo" 列表,您必须使用托管 XPath 调用的语言(XSLT、Python、Java)迭代选定的节点集等

使用 XPath 2.0,您的第二个 XPath,

//*[contains(name(), "foo")]/name()

仅通过 XPath 直接获取 "foob""zfoo" 列表就可以很好地工作。

关于xml - 打印多个匹配的元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44595035/

相关文章:

xpath - 在 Camel 中混合 xpath 和简单表达式

xml - 从 SSRS XML 数据源中选择属性

iphone - 如何从 iPhone 应用程序异步接收数据到 Rails 应用程序?

ios - 异步 NSURLConnection 在每个字节之间接收空字节

java - 使用带有testing.xml的maven命令运行多个测试

java - 如何使用 Xpath Java 修改 XML 中的属性值(包括注释部分)

java - 关注元素 Selenium

xml - PowerShell 将 Get-Content 存储到变量中不返回任何数据

java - 用于编辑与其他元素中包含的名称和值相同的单个子元素的 xpath 查询

xpath - Xpath:基于父值的查询中的异常