美好的一天,请指教。我使用的是 FOP 0.95(版本 1.0)和 EXSL 扩展。我有这个 XML:
<List>
<Item>
<Details><![CDATA[<details><weight>0.5kg</weight><colour>Red</colour></details>]]></Details>
</Item>
</List>
有没有办法使用 exsl:node-set() 函数解析 CDATA 中的字符串?以下代码输出"<细节><重量>0.5千克重量><颜色>红色<颜色>颜色>颜色>细节>"而不是"0.5千克红色",这意味着它不会被解析,而是作为字符串处理:
<xsl:variable name="txtDetails" select="/List/Item/Details"/>
<xsl:variable name="details" select="exsl:node-set($txtDetails)"/>
<xsl:value-of select="$details"/>
答案是否定的。包装在 CDATA 节中的内容不会解析为 XML 标记。这就是 CDATA 部分的重点。使用exsl:node-set()
无济于事。
这个问题与XSL-FO无关。FOP 是一个 XSL-FO 处理器,而不是一个 XML 解析器。当然,它使用XML解析器,但这并不影响这个答案。FOP 也不是 XSLT 处理器;尽管它可以执行 XSLT 转换,但实际的 XSLT 处理器在"幕后"完成真正的工作。