2013-03-14 61 views
0

我嘗試通過xslt文件轉換xml。輸出應該包含一個CDATA部分。爲此,我使用qt 4.8.3中的QXMLQuery對象。將xslt結果放入CDATA部分,使用模塊QtXmlPatterns中的QXmlQuery

我嘗試這樣:

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<b> 
    <a>1</a> 
    <a>2</a> 
    <a>3</a> 
    <a>4</a> 
</b> 

的xsl:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
    <x> 
     <xsl:apply-templates select="./b/a"/> 
    </x> 
    </xsl:template> 
    <xsl:template match="b/a"> 
    <aa> 
     <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> 
     <xsl:value-of select="./text()"/> 
     <xsl:element name="img"/> 
     <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> 
    </aa> 
    </xsl:template> 
</xsl:stylesheet> 

與其他XSLT編輯這導致:

<?xml version="1.0" encoding="UTF-8"?> 
<x> 
    <aa><![CDATA[1<img/>]]></aa> 
    <aa><![CDATA[2<img/>]]></aa> 
    <aa><![CDATA[3<img/>]]></aa> 
    <aa><![CDATA[4<img/>]]></aa> 
</x> 

使用QXMLQuery結果在:

Fehler XTSE0090 in file:///C:/work/2.xsl, bei Zeile 11, Spalte 46: Attribute disable-output-escaping cannot appear on the element text. Only the standard attributes can appear. 

還有其他方法可以做到這一點嗎? 或者,如果沒有辦法:是否有另一個免費或開放源代碼的C++ xslt解析器?

回答

0

看起來您的XSLT處理器不支持該屬性。你可以嘗試在xsl:value-of上使用它:

<xsl:value-of select="'&lt;![CDATA['" disable-output-escaping="yes" /> 
    <xsl:value-of select="./text()"/> 
    <xsl:element name="img"/> 
    <xsl:value-of select="']]&gt;'" disable-output-escaping="yes" /> 

這是我最好的猜測。

0

坦克爲您的答案。但是我的XSLT處理器也不支持xsl:value-of中的disable-output-escaping屬性。