BizTalk WCF SendPort CDATA作为回应

时间:2014-02-13 13:19:23

标签: wcf xpath biztalk biztalk-2010

为了与第三方网络服务集成,我在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'和namespace-uri()='http://tempuri.org/'] / [local-name()='getDocumentsReqResult'和namespace-uri()='http://tempuri.org/'])并将节点编码放到字符串中。 或者我做错了什么。我以前在收到HTML编码字符串时使用过它,但从未使用过CDATA。

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

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

尝试:

/ [本地名称()= 'getDocumentsReqResponse'] / [本地名称()= 'getDocumentsReqResult'] /文本()

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

答案 1 :(得分:0)

我用简单的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>

这也是诀窍。 : - )