【问题标题】:BizTalk xpath with a default namespace and no prefixes具有默认命名空间且无前缀的 BizTalk xpath
【发布时间】:2009-04-24 16:54:31
【问题描述】:

我正在努力使用 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>
  ...

【问题讨论】:

  • 问题的标题具有误导性。默认命名空间是not 空白。它是“aniteps.com/xml/schemas/awm/images4”。你的意思是“没有命名空间前缀”。
  • 感谢 Dimitre 的指点

标签: xpath biztalk


【解决方案1】:

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

  • OhMy:HasErrors
  • 不同:有错误
  • 不需要:有错误

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

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

因此,选择所需的两种节点的 XPath 表达式的一个示例是

/*/*[命名空间-uri() = 'http://www.aniteps.com/xml/schemas/awm/images4' 和 名称()='有错误' ]

和表达式:

/*/*[命名空间-uri() = 'http://www.aniteps.com/xml/schemas/awm/images4' 和 name() = 'NumberOfErrors' ]

【讨论】:

    【解决方案2】:

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

    x = YourMessageName.HasErrors;
    

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

    【讨论】:

    • 不幸的是,没有为我正在使用的 Web 服务生成 Reference.xsd ...我相信这是因为它只返回简单类型,在这种情况下是一个字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2020-06-08
    相关资源
    最近更新 更多