在datapower xslt的Response中的CDATA标记中生成xml作为字符串

时间:2016-07-11 09:02:19

标签: xml xslt ibm-datapower

我遇到问题,在datapower中使用dp:serialize和Populate CDATA标记作为响应。 问题1.无法使用dp:serialize函数从xml转换为字符串。 问题2. Cdata标签无法在问题和soapui响应页面中看到<![CDATA [sometext]]>

这是xslt,它将xml转换为字符串并填充CDATA标记。<​​/ p>

COALESCE(CONVERT(INT, CONVERT(VARCHAR(8),MyDate, 112)),0)

2 个答案:

答案 0 :(得分:1)

您必须指定dp命名空间前缀是XSL语言的扩展,否则DataPower XSLT处理器将<dp:serialize>视为普通XML数据,而不是扩展元素。

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:dp="http://www.datapower.com/extensions"
    extension-element-prefixes="dp">

答案 1 :(得分:1)

在调用序列化数据时不使用 copy-of 使用 value-of 下面的代码对您有用,这里我动态调用 request,而不是从文件中调用。

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:dp="http://www.datapower.com/extensions">
<xsl:output method="xml" cdata-section-elements="ConfigurationXML"/>
<xsl:template match="/">
<xsl:variable name="Configstring1">
<xsl:copy-of select="."/>
</xsl:variable>
<xsl:variable name="Configstring2">
<dp:serialize select="$Configstring1"/>
</xsl:variable>
<Response>
<ConfigurationXML>
<xsl:text disable-output-escaping="yes">&amp;lt;![CDATA[</xsl:text>
<xsl:value-of select="$Configstring2"/>
<xsl:text disable-output-escaping="yes">]]&amp;gt;</xsl:text>
</ConfigurationXML>
</Response>
</xsl:template>
</xsl:stylesheet>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<Response xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" 
xmlns:dp="http://www.datapower.com/extensions">
 <ConfigurationXML>&lt;![CDATA[]]&gt;</ConfigurationXML>
</Response>