首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于使用XSLT的文本数据,ibm-datapower在结果XML中使用"&gt“代替">”和"&lt“

对于使用XSLT的文本数据,ibm-datapower在结果XML中使用"&gt“代替">”和"&lt“
EN

Stack Overflow用户
提问于 2019-07-10 17:58:02
回答 2查看 311关注 0票数 0

在我的一个应用程序中,我试图借助datapower上的xslt来转换服务的响应。在其中一个响应场景中,我需要显示如下所示的xml:

代码语言:javascript
复制
<data contentType="text/xml;charset=utf-8" contentLength="80"><![CDATA[Your request cannot be processed]]></data>

但是我的XSLT在datapower上失败了,它显示了"&gt;""&lt;",而不是">""<"

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

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

代码语言:javascript
复制
<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:尝试使用十六进制值

代码语言:javascript
复制
<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。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-07-10 18:16:06

XSLT中输出某个XML元素的通常方法是一个文本结果元素,因此使用

代码语言:javascript
复制
<data contentType="text/xml;charset=utf-8" contentLength="80">Your request cannot be processed</data>

然后,XSLT将在结果中输出该元素。如果要用变量或参数值填充元素,则使用例如

代码语言:javascript
复制
<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 )。

票数 0
EN

Stack Overflow用户

发布于 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生成开始和结束标记是非常糟糕的做法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56968206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档