Xpath 使用 local-name() 查找特定元素值的属性值

Xpath to find attribute value for a particular element value using local-name()

我有如下所述的有效负载。

<A xmlns:com="http://www.example.com/xml/xmlns/example">
    <B>
        <X appCode="001">xxx</X>
        <Y appId="0002">yyy</Y>
    </B>
    <C>
        <D>
            <E>
                <F id="1" code="001">test-1</F>
                <F id="3" code="002">test-2</F>
                <F id="4" code="003">test-3</F>
                <F id="5" code="004">test-4</F>
            </E>
        </D>
    </C>
</A>

我需要获取 A/C/D/E/F['test-2'] 的 id 值。另外,我必须使用 local-name() 来避免命名空间。 尝试了以下并得到以下结果。

//* [local-name() = 'C']/* [local-name() = 'D']/* [local-name() = 'E']/* [local-name() = 'F']

<F id="1" code="001">test-1</F>
<F id="3" code="002">test-2</F>
<F id="4" code="003">test-3</F>
<F id="5" code="004">test-4</F>

如何找到'test-2'的id值是3? (注意:我在 wso2 EI 属性 调解器中使用它)

提前致谢!

嗯,给你的例子,表达式:

//*[local-name() = 'F'][. = 'test-2']/@id

将 return 3

不过,需要说明的是,命名空间是要用的,不是回避的。在您的样式表中声明命名空间,为其分配一个前缀,并使用该前缀来寻址元素。

另请注意,在给定的示例中,命名空间声明完全是多余的。您可以简单地使用:

"//F[. = 'test-2']/@id"

或更有效一点:

"/A/C/D/E/F[. = 'test-2']/@id"