2009-04-24 54 views
1

我与在BizTalk的XPath功能
挣扎 - 我得到的消息有一个空的默认命名空间
- 在C#中我会添加一个NameSpaceManager
- 但我看不到我如何在BizTalk表达式中执行此操作?的BizTalk XPath的一个默认的命名空间和无前缀

所有我没有做的就是让HasErrors的价值观和NumberOfErrors

<?xml version="1.0" encoding="utf-8"?> 
<ImportIndexDocumentResponse 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.aniteps.com/xml/schemas/awm/images4"> 
    <HasErrors>false</HasErrors> 
    <NumberOfErrors xsi:type="xsd:int">0</NumberOfErrors> 
    <ErrorDescription xsi:type="xsd:string">No exception ocurred.</ErrorDescription> 
    ... 
+0

问题的标题是误导性的。默认的命名空间是* not * blank。它是“http://www.aniteps.com/xml/schemas/awm/images4”。你的意思是“没有命名空间前缀”。 – 2009-04-25 14:51:18

+0

感谢指针Dimitre – SteveC 2009-05-05 10:19:16

回答

1

使用local-name()的答案是错误的,因为它允许选择不需要的元素,如:

  • OhMy:HasErrors
  • 不同:HasErrors
  • 无用:HasErrors

这是一个正确的解决办法:

如果它是不可能的前缀绑定到默认名称空间http://www.aniteps.com/xml/schemas/awm/images4一个可以使用标准的XPath函数namespace-uri()指定该元素必须驻留在给定的名称空间中。

Thereforere,即选择需要的两种节点的XPath表达式的一个例子是

 
/*/*[namespace-uri() = 'http://www.aniteps.com/xml/schemas/awm/images4' 
    and 
    name() = 'HasErrors' 
    ] 

和表达:

 
/*/*[namespace-uri() = 'http://www.aniteps.com/xml/schemas/awm/images4' 
    and 
    name() = 'NumberOfErrors' 
    ] 
0

如果你的元素不会重复,你可以促进他们从响应架构中作为区分字段。那么你不必担心编码。只需使用:

x = YourMessageName.HasErrors; 

如果它是一个Web/WCF的参考,您可以促进(与“使用WCF服务向导”或xyz.xsd)从reference.xsd值。请注意,如果更新参考文献,它们将“消失”。