将xslt结果与来自Module QtXmlPatterns的QXmlQuery放在CDATA部分中

时间:2013-03-14 13:13:33

标签: qt xslt

我尝试用xslt文件转换xml。输出应包含CDATA部分。为此,我使用qt 4.8.3中的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解析器?

1 个答案:

答案 0 :(得分: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" />

这是我最好的猜测。