2012-08-22 102 views
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'] 

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

回答

0

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

查询

//ms-xrm:AuthenticationPolicy 

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

相关问题