我有一个看起来像这样的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']
这给了我空名单。什么是正确的语法?
答案 0 :(得分:0)
你说你想要“正是这些元素”,但是你暗示一个给出这两个元素的表达是错误的,所以我想也许你只想要第二个。
查询
//ms-xrm:AuthenticationPolicy
不应该给你这两个元素;它应该根据名称空间前缀ms-xrm的绑定方式给出一个或另一个。在XPath中,名称空间前缀只能绑定到一个名称空间。您还没有说过您正在使用的XPath API,或命名空间前缀如何绑定,但它必须引用两个名称空间中的一个,并确定选择哪个元素。 XPath中使用的命名空间前缀与源文档中的前缀没有任何关系(除非您的API以这种方式初始化它们。)如果您说的是对的,那么这是XPath处理器中的错误。