【问题标题】:Biztalk mapping with namespace prefix带有命名空间前缀的 Biztalk 映射
【发布时间】:2015-06-18 10:21:43
【问题描述】:

我需要在所有节点上生成带有命名空间前缀的输出消息。

有人可以帮帮我吗?

我的问题是在 BizTalk 中映射后,输出消息具有内联命名空间。

例如,我期望:

<ns0:root xmlns:ns0="http://www.domain1.com" xmlns:domain2="http://www.domain2.com">
    <domain2:element1>abc</domain2:element1>
    <ns0:element2>abc</ns0:element2>
</ns0:root>

但它是:

<root xmlns="http://www.domain1.com">
    <element1 xmlns="http://www.domain2.com">abc</element1>
    <element2 xmlns="http://www.domain1.com">abc</element2>
</root>

命名空间别名 ns0、domain2 对我来说并不重要。

【问题讨论】:

    标签: biztalk biztalk-2009


    【解决方案1】:

    将目标架构上的ElementFormDefault 属性设置为Qualified

    可以通过单击相关架构树中的&lt;Schema&gt; 节点来查看此属性;请注意,这是对架构的更改,而不是在地图中完成(尽管图像可能看起来像):

    【讨论】:

    • 这是客户的架构,我无法更改。也许自定义 xslt 是一种选择。
    • 是的,映射引擎将依赖架构中的该属性。如果无法更改,自定义 XSLT 可能是您最好的选择。
    【解决方案2】:

    这两个 Xml 都是相同的,是否使用前缀并不重要,因为 Xml 元素按照定义的方案属于命名空间。请求具有特定前缀的 xml 不是有效要求。即使您需要这样做,也请使用自定义 Xslt。

    【讨论】:

    • 用前缀限定元素是一种很好的做法。一些解析器可能无法使用默认命名空间,而一些贸易伙伴可能要求对元素进行限定。
    • 是的,正如 Dan Field 所说,不幸的是,我们的客户在使用默认命名空间时遇到了问题。
    • 正如我之前所说,如果你必须这样做,请使用自定义 Xslt。我同意 Dan 关于使用命名空间限定元素的观点,但是你的两个 xml 都已经有限定元素,所以我假设你的模式是正确的。有前缀只是避免用每个元素声明命名空间。如果您使用 yr 架构验证 yr 第二个 xml,它也应该与第一个一样有效。如果您的客户坚持为它们添加前缀,您可以使用自定义 Xslt 来实现。验证 yr 地图,它将生成 Xsl 文件,检查输出窗口。以此为起点。一旦 Dane 将 Xsl 文件保存在您的项目中并在地图中使用它。
    【解决方案3】:

    有许多依赖 ns 前缀的遗留解析器。即使是同一件事。这里的解决方案是将您的架构设置为 XML 类型,您将拥有您的命名空间,如果您有一个平面文件架构,您必须如 Dan Field 所述将您的 ElementFormDefault 设置为 Qualified,并在 XSLT 中编写您想要的内容

    【讨论】:

      猜你喜欢
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多