首页 > 解决方案 > 可以针对多个命名空间吗?

问题描述

假设我有以下 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>

数据分为RowsColumns。因此,我可以通过//R:Name使用//C:Name. 是否可以使用第三个名称空间(或任何名称空间)来定位两者。例如,像A:(代表“全部”)这样的东西可以针对一列或一行?或者,是否甚至可以“跳过”命名空间评估(可能类似于local-name(...))来完成我想要完成的事情?

标签: xmlxpathxpath-1.0

解决方案


是的,这可以使用local-name()函数。这是一个返回值“9”的 XPath 表达式示例:

//*[local-name()='Product'][@value='Computer']/*[local-name()='Year'][@value='2019']/*[local-name()='SumOfUnits']/@value

推荐阅读