标识具有不同命名空间绑定的元素

时间:2012-08-22 04:17:19

标签: java xpath

我有一个看起来像这样的xml。 注意:对于两个AuthenticationPolicy元素,ms-xrm命名空间的映射方式不同。

<ms-xrm:AuthenticationPolicy xmlns:ms-xrm="http://schemas.microsoft.com/xrm/2011/Contracts/Services"> 
     <ms-xrm:Authentication>LiveId</ms-xrm:Authentication>
</ms-xrm:AuthenticationPolicy>

<ms-xrm:AuthenticationPolicy xmlns:ms-xrm="http://schemas.microsoft.com/xrm/2012/Contracts/Services"> 
    <ms-xrm:Authentication>OnlineFederation</ms-xrm:Authentication>
</ms-xrm:AuthenticationPolicy>

我想要一个能够准确提供这些元素的XPath,如果我尝试

//ms-xrm:AuthenticationPolicy

我得到了两个元素。我试过了

//AuthenticationPolicy[namespace-uri()='http://schemas.microsoft.com/xrm/2012/Contracts/Services']

这给了我空名单。什么是正确的语法?

1 个答案:

答案 0 :(得分:0)

你说你想要“正是这些元素”,但是你暗示一个给出这两个元素的表达是错误的,所以我想也许你只想要第二个。

查询

//ms-xrm:AuthenticationPolicy

不应该给你这两个元素;它应该根据名称空间前缀ms-xrm的绑定方式给出一个或另一个。在XPath中,名称空间前缀只能绑定到一个名称空间。您还没有说过您正在使用的XPath API,或命名空间前缀如何绑定,但它必须引用两个名称空间中的一个,并确定选择哪个元素。 XPath中使用的命名空间前缀与源文档中的前缀没有任何关系(除非您的API以这种方式初始化它们。)如果您说的是对的,那么这是XPath处理器中的错误。