我遇到问题,在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)
答案 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">&lt;![CDATA[</xsl:text>
<xsl:value-of select="$Configstring2"/>
<xsl:text disable-output-escaping="yes">]]&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><![CDATA[]]></ConfigurationXML>
</Response>