在我的一个应用程序中,我试图借助datapower上的xslt来转换服务的响应。在其中一个响应场景中,我需要显示如下所示的xml:
<data contentType="text/xml;charset=utf-8" contentLength="80"><![CDATA[Your request cannot be processed]]></data>但是我的XSLT在datapower上失败了,它显示了">"和"<",而不是">"和"<"。
下面是我尝试的一些模板。请看一看,并建议任何更正:
尝试1:尝试使用">“和"<"
<xsl:param name="mask" select="'Your request cannot be processed'"/>
<xsl:template match="*" mode="copyFault">
<xsl:text disable-output-escaping="yes"><data contentType="text/xml;charset=utf-8" contentLength="80"><![CDATA[</xsl:text>
<xsl:value-of select="$mask" />
<xsl:text disable-output-escaping="yes">]]></data></xsl:text>
</xsl:template>尝试2:尝试使用十六进制值
<xsl:param name="mask" select="'Your request cannot be processed'"/>
<xsl:variable name="lessThan" select="'<'"/>
<xsl:variable name="GreaterThan" select="'>'"/>
<xsl:template match="*" mode="copyFault">
<xsl:value-of disable-output-escaping = "yes" select="$lessThan"/>
<xsl:text>data contentType="text/xml;charset=utf-8" contentLength="80"</xsl:text>
<xsl:value-of disable-output-escaping = "yes" select="$GreaterThan"/>
<xsl:value-of disable-output-escaping = "yes" select="$lessThan"/>
<xsl:text>![CDATA[</xsl:text>
<xsl:value-of select="$mask" />
<xsl:text>]]</xsl:text>
<xsl:value-of disable-output-escaping = "yes" select="$GreaterThan"/>
<xsl:value-of disable-output-escaping = "yes" select="$lessThan"/>
<xsl:text>/data</xsl:text>
<xsl:value-of disable-output-escaping = "yes" select="$GreaterThan"/>
</xsl:template>请告诉我应该怎么做才能从datapower获得适当格式的xml。
谢谢。
发布于 2019-07-10 18:16:06
XSLT中输出某个XML元素的通常方法是一个文本结果元素,因此使用
<data contentType="text/xml;charset=utf-8" contentLength="80">Your request cannot be processed</data>然后,XSLT将在结果中输出该元素。如果要用变量或参数值填充元素,则使用例如
<data contentType="text/xml;charset=utf-8" contentLength="80"><xsl:value-of select="$mask"/></data>如果XSLT处理器负责将结果序列化为文件或字符串,并且您希望像data元素这样的元素具有CDATA部分作为内容,那么可以将<xsl:output cdata-section-elements="data"/>声明为xsl:stylesheet的子元素(如果根元素以这种方式命名,则声明为xsl:transform )。
发布于 2019-07-11 17:29:00
XSLT是一个非常糟糕的特性:它并不能在所有处理器上运行,而且如果完全支持它,它只有在转换输出直接输入到支持disable-output-escaping的串行化程序中时才能运行,因此这取决于您运行转换的方式。
尽可能避免使用disable-output-escaping要好得多,而且这里肯定没有证据表明您需要它。输出CDATA节的要求有些不寻常(任何编写良好的应用程序读取XML都不关心文本是否在CDATA节中),但是如果确实需要的话,通常可以使用<xsl:output cdata-section-elements="data"/>来实现。(不过,这只有在输出被馈送到支持XSLT的串行化程序中时才有效。)
当然,使用disable-output-escaping生成开始和结束标记是非常糟糕的做法。
https://stackoverflow.com/questions/56968206
复制相似问题