>我有一个 xml 文档,其节点可以选择包含转义 xml 的字符串。我希望能够在 BizTalk 映射中使用 xsl 转换该内容。任何建议如何?
我试过:
- msxsl:node-set(string).这将创建一个没有内容的无名称单个节点。
- document() 函数使用 url 前缀 'data:text/xml' 正如 helderdarocha 在这里建议的那样。
- 对于每个选择包含字符串的节点的 text()
- 在业务流程中使用 xpath() 提取字符串,然后生成多部分消息。它不允许我将 xmlDocument 消息用作多部分消息转换中的消息之一。
是否必须使用 C# 帮助程序程序集来完成此操作?
项目中解决了类似的问题,其中我有一系列 2 个映射(都是本机 xslt)。
第一个地图会将输入文档映射到中间格式。这种格式有一个"any"节点(而不是转义的XML节点),最终,我在其中放入了未转义的XML。我使用 C# 扩展对象进行转义。
C# 代码可能只是System.Web.HttpUtility.HtmlDecode()
的包装器
在第二个映射中,您可以使用普通 XPath 进行映射。
示例输入消息:
<root>
<someNode>blabla</someNode>
<any><root2><myValue>escapedXml</myValue></root2></any>
</root>
中间格式:
<root>
<someNode>blabla</someNode>
<any>
<root2>
<myValue>escapedXml</myValue>
</root2>
</any>
</root>
在第二个映射中,您可以像/root/any/root2/myValue/text()
一样使用 XPath,没有任何问题。
重要提示:
如果您需要针对此中间格式执行 XSD 验证,这也是执行此操作的好方法。您只需要根据需要创建适当的中间 XSD。就我而言,这是必需的,因此我必须使用业务流程中的接收管道执行来验证这种未转义的格式。