如何在另一个XML中使用包装在CDATA中的XML进行XSL转换?

时间:2012-02-01 10:03:46

标签: xslt xslt-1.0 cdata

XML文档包含另一个XML元素,它包含在CDATA中。

如何将包装好的XML用于XSL和XSL-FO转换(版本1)?

2 个答案:

答案 0 :(得分:2)

如果您愿意采取多个转换步骤,那么就有可能。使用disable-output-escaping输出相关部分,以将转义的XML转换为有效的XML。在后续步骤中处理它。

它确实要求转义的XML格式正确。并且一些解析器需要首先将中间结果序列化(到磁盘或其他),以确保转义的XML在进入后续转换之前被正确转义。

答案 1 :(得分:1)

在单个转换中,标准XSLT 1.0或2.0无法实现这一点。

可以使用Saxon 9 Professional Edition或Enterprise Edition完成。这些产品具有saxon:parse()扩展功能。或者使用XPath 3.0 parse-xml()函数,最近版本的Saxon PE / EE也支持该函数。


正如@grtjn指出的那样,可以通过两遍过程来完成。样式表1将CDATA包装的文本转换为可解析的XML(使用<xsl:value-of select="whatever" disable-output-escaping="yes"/>)。然后,样式表2处理样式表1生成的序列化结果。