是否可以使用 FOP 0.95 和 exsl:node-set() 函数解析包装在 CDATA 中的 XML



美好的一天,请指教。我使用的是 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 处理器在"幕后"完成真正的工作。

相关内容

  • 没有找到相关文章