我正在尝试将包含如下内容的文档转换为另一个文档,使 CDATA 与第一个文档中的完全相同,但我还没有弄清楚如何使用 XSLT 保留 CDATA。
初始 XML:
<node>
<subNode>
<![CDATA[ HI THERE ]]>
</subNode>
<subNode>
<![CDATA[ SOME TEXT ]]>
</subNode>
</node>
最终 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 有什么想法吗?
谢谢!
槊
使用 ruby/nokogiri
更新:这是有效的。
<text disable-output-escaping="yes"><![CDATA[</text>
<value-of select="normalize-space(text())" disable-output-escaping="yes"/>
<text disable-output-escaping="yes">]]></text>
这会将所有 text() 节点包装在 CDATA 中,这可以满足我的需要,并且它将在文本中保留 html 标签。
如果 CDATA 节点与纯文本节点混合在一起,则无法保留它们的精确序列。充其量,您可以通过在中列出该元素名称来强制输出中特定元素的所有内容为 CDATAxsl:output/@cdata-section-elements
:
<xsl:output cdata-section-elements="text"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)