[英]ibm-datapower gives “>” in place of “>” and “<” 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在數據能力上失敗,並且顯示">"
和"<"
代替">"
和"<"
。
以下是我嘗試的一些模板。 請看一下並提出任何更正建議:
嘗試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。
謝謝。
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.