繁体   English   中英

ibm-datapower在使用XSLT的文本数据的结果XML中用“>”代替“>”,用“ <”代替“ <”

[英]ibm-datapower gives “&gt” in place of “>” and “&lt” in place of “<” in resulting XML for text data using XSLT

在我的一个应用程序中,我试图借助xslt on datapower转换服务的响应。 在一种响应方案中,我需要显示一个类似于以下内容的xml:

<data contentType="text/xml;charset=utf-8" contentLength="80"><![CDATA[Your request cannot be processed]]></data>

但是我的XSLT在数据能力上失败,并且显示"&gt;" "&lt;" 代替">""<"

以下是我尝试的一些模板。 请看一下并提出任何更正建议:

尝试1:尝试使用"&gt; ”和"&lt;"

<xsl:param name="mask"   select="'Your request cannot be processed'"/>

         <xsl:template match="*" mode="copyFault">
            <xsl:text disable-output-escaping="yes">&lt;data contentType="text/xml;charset=utf-8" contentLength="80"&gt;&lt;![CDATA[</xsl:text>   
            <xsl:value-of select="$mask" />
            <xsl:text disable-output-escaping="yes">]]&gt;&lt;/data&gt;</xsl:text>           
          </xsl:template>

尝试2:尝试使用十六进制值

<xsl:param name="mask"   select="'Your request cannot be processed'"/>
          <xsl:variable name="lessThan" select="'&#x3C;'"/>
          <xsl:variable name="GreaterThan" select="'&#x3E;'"/>

         <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。

谢谢。

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如果您已经用这种方式命名根元素)的子级。

disable-output-escaping是一个非常讨厌的功能:并非在所有处理器上都有效,并且如果完全受支持,则仅在将转换输出直接输入到支持XSLT的序列化器中时才起作用,因此它取决于您正在运行转换。

最好在可能的情况下避免使用disable-output-escaping ,并且当然没有证据表明您需要它。 输出CDATA部分的要求有些不寻常(任何编写良好的读取XML的应用程序都不关心文本是否在CDATA部分中),但是如果确实需要,通常可以使用<xsl:output cdata-section-elements="data"/>来实现<xsl:output cdata-section-elements="data"/> (尽管如此,这仅在将输出馈入支持XSLT的串行器中时有效。)

当然,使用disable-output-escaping生成开始和结束标签是非常差的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM