使用XSLT转换XML并保留CDATA(在Ruby中)

Lan*_*ard 7 xml xslt parsing cdata nokogiri

我正在尝试将包含以下内容的文档转换为另一个文档,使CDATA与第一个文档中的完全一样,但我还没有弄清楚如何使用XSLT保留CDATA.

初始XML:

<node>
    <subNode>
        <![CDATA[ HI THERE ]]>
    </subNode>
    <subNode>
        <![CDATA[ SOME TEXT ]]>
    </subNode>
</node>
Run Code Online (Sandbox Code Playgroud)

最终的XML:

<newDoc>
    <data>
        <text>
            <![CDATA[ HI THERE ]]>
        </text>
        <text>
            <![CDATA[ SOME TEXT ]]>
        </text>
    </data>
</newDoc>
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西,但没有运气,一切都变得混乱:

<xsl:element name="subNode">
    <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:element>
Run Code Online (Sandbox Code Playgroud)

有关如何保存CDATA的任何想法?

谢谢!长矛

使用ruby/nokogiri

更新:这是有效的.

<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>
Run Code Online (Sandbox Code Playgroud)

这将包装CDATA中的所有text()节点,这对我需要的东西起作用,并且它将在文本中保留html标签.

Pav*_*aev 5

如果CDATA节点与纯文本节点混合,则无法保留CDATA节点的精确序列.充其量,您可以通过在xsl:output/@cdata-section-elements以下位置列出该元素名称来强制输出中特定元素的所有内容为CDATA :

<xsl:output cdata-section-elements="text"/>
Run Code Online (Sandbox Code Playgroud)