在BizTalk中映射包含xml的字符串

时间:2016-03-11 17:16:40

标签: xslt-1.0 biztalk biztalk-2010

我有一个带有节点的xml文档,该节点可以选择包含一个转义的xml字符串。我希望能够在BizTalk映射中使用xsl转换该内容。有什么建议吗?

我试过了:

  • msxsl:节点集(字符串)。这将创建一个没有内容的无名单节点。
  • 使用网址前缀' data:text / xml'的document()函数正如helderdarocha here所建议的那样。
  • for-each选择包含字符串
  • 的节点的text()
  • 在业务流程中使用xpath()来提取字符串,然后创建一个多部分消息。它不会让我使用xmlDocument消息作为多部分消息转换中的消息之一。

我是否必须使用C#帮助程序集来完成此操作?

1 个答案:

答案 0 :(得分:3)

我在项目中解决了类似的问题,我有一系列2个映射(都是本机xslt)。

第一张地图会将您的输入文档映射为中间格式。这种格式有一个"任何"节点(而不是转义的XML节点),最终,我放入了未转义的XML。我使用C#扩展对象进行unescape。
C#代码可以只是System.Web.HttpUtility.HtmlDecode()

的包装器

在第二个映射中,您可以使用普通XPath进行映射。

示例输入消息:

<root>
  <someNode>blabla</someNode>
  <any>&lt;root2&gt;&lt;myValue&gt;escapedXml&lt;/myValue&gt;&lt;/root2&gt;</any>
</root>

中级格式:

<root>
  <someNode>blabla</someNode>
  <any>
    <root2>
      <myValue>escapedXml</myValue>
    </root2>
  </any>
</root>

在第二个映射中,您可以使用/root/any/root2/myValue/text()之类的XPath而不会出现任何问题。

重要提示

如果您需要针对此中间格式进行XSD验证,这也是一种很好的方法。您只需根据需要创建适当的中间XSD。在我的情况下,这是必需的,所以我必须使用业务流程中的接收管道执行来验证这种非转义格式。