2009-10-01 10 views
7

次のような内容のドキュメントを別のドキュメントに変換しようとしていますが、最初のドキュメントのようにCDATAをそのまま残していますが、 XSLTを使用してCDATAを保存します。XMLをXSLTで変換してCDATAを保存する(Rubyで)

初期XML:

​​

決勝XML:

<newDoc> 
    <data> 
     <text> 
      <![CDATA[ HI THERE ]]> 
     </text> 
     <text> 
      <![CDATA[ SOME TEXT ]]> 
     </text> 
    </data> 
</newDoc> 

私はこのような何かを試してみたが、ない運、すべてがごちゃ混ぜないます:

<xsl:element name="subNode"> 
    <xsl:value-of select="." disable-output-escaping="yes"/> 
</xsl:element> 

任意のアイデアはどのようにCDATAを保存するには?

ありがとうございます! ランス

ルビー/鋸山

Updateを使用:ここで働く何かです。私は必要なもののために働くCDATA、内のすべてのテキスト()ノードをラップし、それがテキスト内のHTMLタグを保持します

<text disable-output-escaping="yes">&lt;![CDATA[</text> 
<value-of select="normalize-space(text())" disable-output-escaping="yes"/> 
<text disable-output-escaping="yes">]]&gt;</text> 

答えて

5

プレーンテキストノードと混在している場合、CDATAノードの正確なシーケンスを保存することはできません。せいぜい、あなたはxsl:output/@cdata-section-elementsにその要素名をリストアップすることで、CDATAであることを出力して、特定の要素のすべての内容を強制することができます

<xsl:output cdata-section-elements="text"/> 
+0

私はxsltやその行に沿って何かをする前に、それらを前処理するためにルビと多分正規表現を使うべきですか?それ以外はどうやってやるの?私が変数などを使用しているので、cdata-section-elementsはそれをカットしていません。 チップをありがとう。 –

+0

CDATAが絶対に必要な場合は、XSLT以外のものを探す必要があります。それは、私があなたがそれを必要とする理由について非常に興味があると言いました。 XDMでは、テキストとCDATAを区別することはありません。正当なXML処理アプリケーションでは、異なるセマンティクスを与えるべきではありません。したがって、CDATAと文字エスケープは互換的に使用できます。 –

+0

私はこのデータをFlashで使用しています。CDATA/CDATAの問題が多いと聞いています。私はまだ実際には試していません:p –

3

自分の質問への答えを投稿して申し訳ありませんが、私は働く何かを見つけました:私は必要なもののために働くすべてのテキスト()CDATA内のノードを、折り返されます、そしてそれは、テキスト内のHTMLタグを保持します


<text disable-output-escaping="yes">&lt;![CDATA[</text> <value-of select="normalize-space(text())" disable-output-escaping="yes"/> <text disable-output-escaping="yes">]]&gt;</text> 

+0

CDATAノードを出力に特別に取得する方法だと思いますが(ただし、入力 'text()'で ']]' 'を得ることができます。私は入力テキストノードを入力CDATAノードから区別する方法がまだないので、最初にそこにあったCDATAノードをどのように保持できるかはわかりません。さもなければ、私はこれが 'cdata-section-elements'とどのように違うのか見ていません... –

関連する問題