【问题标题】:BizTalk WCF SendPort CDATA in responseBizTalk WCF SendPort CDATA 响应
【发布时间】:2014-02-13 13:19:23
【问题描述】:

对于与第 3 方网络服务的集成,我在 CDATA 部分中接收我的“实际”数据。

<getDocumentsReqResponse xmlns="http://tempuri.org/">
    <getDocumentsReqResult>
        <![CDATA[<?xml version="1.0"?>
<wsResult>
<rsCode>00</rsCode>
<rsMessage>...</rsMessage>
</wsResult>]]></getDocumentsReqResult>
</getDocumentsReqResponse>

所以我试图在发送端口上使用入站路径选项。但是当我尝试这样做时,我收到一条空消息。此选项是否适用于 CDATA? 我刚刚输入了 xpath (/[local-name()='getDocumentsReqResponse' and namespace-uri()='http://tempuri.org/']/[local-name()='getDocumentsReqResult' and namespace -uri()='http://tempuri.org/']) 并将节点编码放入字符串。 还是我做错了什么。我过去在收到 HTML 编码字符串时使用过它,但从未使用过 CDATA。

无论如何我都需要在这个过程中进行编排,所以如果这是唯一的选择,我将不得不这样做。

感谢您的帮助

【问题讨论】:

    标签: wcf xpath biztalk biztalk-2010


    【解决方案1】:

    试试:

    /[local-name()='getDocumentsReqResponse']/[local-name()='getDocumentsReqResult']/text()

    从技术上讲,在 xPath 中,text() 应该返回 CDATA 内容。您可以在任何 .Net 应用程序中对其进行测试,因为它的行为相同。

    【讨论】:

    • 我已经试过了。无结果:无法找到入站正文路径表达式的匹配项。我尝试将编码设置为字符串和 xml。
    【解决方案2】:

    我用一个简单的 xslt 修复了它

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0" version="1.0" xmlns:s0="http://tempuri.org/">
      <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
      <xsl:template match="/">
        <xsl:apply-templates select="/s0:getDocumentsReqResponse" />
      </xsl:template>
      <xsl:template match="/s0:getDocumentsReqResponse">
        <xsl:value-of select="normalize-space(s0:getDocumentsReqResult)" disable-output-escaping="yes" />
      </xsl:template>
    </xsl:stylesheet>
    

    这也可以解决问题。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2014-10-18
      • 2011-02-24
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多