簡體   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