我有一个 XML 文件,所有包含信息的节点都在 CDATA 中。这些信息可能使用一些 HTML 标记进行格式化,如下所示:
<EventList>
<Text><![CDATA[<p>Some text <i>is</i> formatted! This is a character entity '</p>]]></Text>
<ShortText><![CDATA[Some other is only plain]]></ShortText>
<!-- others more -->
</EventList>
我想在 (X)HTML 页面中使用 XSLT 对其进行转换:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output
method="html"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
media-type="application/xhtml+xml"
encoding="utf-8"
omit-xml-declaration="yes"
indent="no"
/>
<xsl:template match="Text">
<h2><xsl:copy-of select="text()"/></h2>
</xsl:template>
<xsl:template match="ShortText">
<div><xsl:copy-of select="."/></div>
</xsl:template>
</xsl:stylesheet>
但是应用这种转换会产生一种奇怪的行为。我在 XSLT 中放入的 HTML 标记已从浏览器中正确解析和解释,但 CDATA 中的标记被去除和char,从而产生以下输出<
:>
&
<h2>pSome text iis/i formatted! This is a character entity #39;/p</h2>
<div>Some other is only plain</div>
起初它看起来像是<xsl:output>
定义中的一个问题,但我仍然坚持这一点。我尝试使用速记 XPath.
和函数text()
,但输出是相同的。任何建议表示赞赏!