BizTalk xpath具有默认命名空间,没有前缀

时间:2009-04-24 16:54:32

标签: xpath biztalk

我正在努力使用BizTalk xpath功能
- 我收到的消息有一个空白的默认命名空间
- 在C#中我添加一个NameSpaceManager
- 但我无法看到如何在BizTalk表达式中执行此操作?

我没有做的就是获取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>
  ...

2 个答案:

答案 0 :(得分:1)

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

  • OhMy:HasErrors
  • 不同:HasErrors
  • 不希望的:HasErrors

这是一个正确的解决方案:

如果无法将前缀绑定到默认命名空间http://www.aniteps.com/xml/schemas/awm/images4”,可以使用标准XPath函数namespace-uri() 指定元素必须驻留在给定的命名空间中。

因此,选择想要的两种节点的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'
    ]

答案 1 :(得分:0)

如果您的元素没有重复,您可以将它们作为区分字段从响应模式中提升。那你就不用担心编码了。只需使用:

x = YourMessageName.HasErrors;

如果是web / wcf引用,则可以使用reference.xsd(或使用“Consume Wcf Service Wizard”的xyz.xsd)来提升值。请注意,如果您更新参考,它们将“消失”。