xml - 可以针对多个命名空间吗?
问题描述
假设我有以下 XML:
<Data xmlns:R="Rows" xmlns:C="Columns" xmlns:V="Values">
<R:ProductGroup value="Electronics">
<R:Product value="Computer">
<C:Year value="2018">
<V:SumOfRevenue value="104" />
<V:SumOfUnits value="3" />
</C:Year>
<C:Year value="2019">
<V:SumOfRevenue value="82" />
<V:SumOfUnits value="9" />
</C:Year>
<C:Year value="(all)">
<V:SumOfRevenue value="186" />
<V:SumOfUnits value="12" />
</C:Year>
</R:Product>
</R:ProductGroup>
</Data>
数据分为Rows
和Columns
。因此,我可以通过//R:Name
使用//C:Name
. 是否可以使用第三个名称空间(或任何名称空间)来定位两者。例如,像A:
(代表“全部”)这样的东西可以针对一列或一行?或者,是否甚至可以“跳过”命名空间评估(可能类似于local-name(...)
)来完成我想要完成的事情?
解决方案
是的,这可以使用local-name()
函数。这是一个返回值“9”的 XPath 表达式示例:
//*[local-name()='Product'][@value='Computer']/*[local-name()='Year'][@value='2019']/*[local-name()='SumOfUnits']/@value
推荐阅读
- android - 组织 SDK + NDK 模块的最佳方式是什么
- php - Composer 读取 php 版本错误?
- linux - 我如何知道我的系统上是否启用了 ARM 的 XN(从不执行)位支持?
- swift - 为什么虽然我正确保存文件并看到它,但我无法获取 filePath?
- c++ - 用于匹配子表达式的正则表达式
- powershell - 阻止批量用户帐户
- swift - Swift 3 到 5 迁移问题。在目标 c 中使用 swift 5 个对象
- java - System.FormatException:输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符
- mysql - 无法识别的关键字和语句类型 (FROM)
- java - Spring Boot:Hibernate 不使用 application.properties 配置