0

我有一个看起来像这样的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']

这给了我空列表。什么是正确的语法?

4

1 回答 1

0

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

查询

//ms-xrm:AuthenticationPolicy

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

于 2012-08-22T07:19:37.690 回答