0

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 パーサーはありますか?

4

1 に答える 1

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" />

それが私の最善の推測です。

于 2013-03-14T14:17:01.103 に答える