可以定位多个名称空间吗?
Possible to target multiple namespaces?
假设我有以下 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
的列来定位行元素。是否可以使用第三个名称空间(或任何名称)来定位 both。例如,像 A:
(代表“全部”)这样的东西可以定位到一列或一行?或者,是否有可能 'skip' 命名空间评估(可能类似于 local-name(...)
)来完成我想要完成的事情?
是的,可以使用 local-name()
函数。这是一个 XPath 表达式的示例,它将 return 值 "9":
//*[local-name()='Product'][@value='Computer']/*[local-name()='Year'][@value='2019']/*[local-name()='SumOfUnits']/@value
假设我有以下 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
的列来定位行元素。是否可以使用第三个名称空间(或任何名称)来定位 both。例如,像 A:
(代表“全部”)这样的东西可以定位到一列或一行?或者,是否有可能 'skip' 命名空间评估(可能类似于 local-name(...)
)来完成我想要完成的事情?
是的,可以使用 local-name()
函数。这是一个 XPath 表达式的示例,它将 return 值 "9":
//*[local-name()='Product'][@value='Computer']/*[local-name()='Year'][@value='2019']/*[local-name()='SumOfUnits']/@value