我正在努力使用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>
...
答案 0 :(得分:1)
使用local-name()
的答案是错误的,因为它允许选择不需要的元素,例如:
这是一个正确的解决方案:
如果无法将前缀绑定到默认命名空间“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)来提升值。请注意,如果您更新参考,它们将“消失”。