【问题标题】:Enable output escaping for xml document in <any> tag在 <any> 标记中启用 xml 文档的输出转义
【发布时间】:2018-12-13 11:34:29
【问题描述】:

我在 any 标记中接收到一个标准 XML 文档。目前我只是复制收到的整个文档,并将其插入到任何标签中,如下面的 XSLT 所示:

      <xsl:element name="msgBody">
        <xsl:copy>
          <xsl:copy-of select="/" />
        </xsl:copy>
      </xsl:element>

这按预期工作,因为它将 XML 文档插入到架构中放置 any 标记的位置。但是,这需要使用 WCF-SQL 适配器发送到 SQL 数据库。因此,我需要取消对 XML 的 escpae,因为适配器正在解释 字符,这会引发如下错误:

"名称为 X 和命名空间 X 的起始元素是意外的。请 确保您的输入 XML 符合操作的架构。”

any 标签被设置为跳过 xml 处理。我知道有一个选项可以禁用 value-of 元素上的输出转义,但是如何使用 copy-of 元素来实现这一点?我是否需要实现一个管道来处理转义?

简而言之,我想要一个这样的 XML 字符串:

<bizSaveDocument>
    <conversationID>829c0747-76e0-4298-a9f1-0fcc2a234668</conversationID>
    <fromID>NULL</fromID>
    <toID>NULL</toID>
</bizSaveDocument>

要转义,让map的输出变成这样:

&lt;bizSaveDocument&gt;
    &lt;conversationID&gt;829c0747-76e0-4298-a9f1-0fcc2a234668&lt;/conversationID&gt;
    &lt;fromID&gt;NULL&lt;/fromID&gt;
    &lt;toID&gt;NULL&lt;/toID&gt;
&lt;/bizSaveDocument&gt;

【问题讨论】:

  • 搞笑,我也遇到了同样的问题。这可能会有所帮助stackoverflow.com/questions/1162352/…
  • 谢谢,我尝试了这个解决方案,但它会产生很多不必要的命名空间,正如作者所描述的那样。你知道从输出中删除这些命名空间的方法吗?
  • 这似乎有点不寻常。您是否尝试将 Xml 作为字符串发送?或者您会在上面使用 OpenXml(不要;)吗?基本上,一旦 Xml 到达 SP,您将如何处理它?
  • XML 应该存储在数据库中单个字段的记录中。是的,我正在尝试将 XML 作为字符串发送,因为它不会以任何方式进行处理或验证。

标签: xml xslt tags maps biztalk


【解决方案1】:

为此,您必须使用一些小的自定义 Xslt。

已在本博客中解释:Convert xml file to string inside BizTalk map using inline XSLT

注意,此技术使用 CDATA 部分,其技术与转义相同。

如果您真的希望它转义,您可以删除 disable-output-escaping 属性和 CDATA 部分。 (披露:这就是我记得它的工作方式,我有一段时间没有这样做了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    相关资源
    最近更新 更多