我正在将XHTML文件转换为XML。我遇到了XHML实体引用的问题,这些问题都在这个过程中被吞噬,即& copy等实体;正在消失在输出中。
我的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="h1|h2|h3|h4|h5|h6|h7|h8|h9">
<heading>
<xsl:attribute name="name">
<xsl:value-of select="name(.)" />
</xsl:attribute>
<xsl:attribute name="content">
<xsl:value-of select="." />
</xsl:attribute>
</heading>
</xsl:template>
<xsl:template match="/html/body">
<mapping>
<xsl:apply-templates select="h1|h2|h3|h4|h5|h6|h7|h8|h9" />
</mapping>
</xsl:template>
</xsl:stylesheet>
在输出中,任何实体引用都会消失。我已经尝试将实体定义添加到我的XSL中......没有运气。
有什么建议吗?
安东
答案 0 :(得分:2)
实体引用需要DTD。确保源文档包含DTD,并且您不禁用实体解析。
您希望发生的是输入中的©
在输出文档中变为©。您不希望输出文档中包含实体引用。
答案 1 :(得分:1)
在XSLT启动之前,实体都是由XML解析器(概念上)扩展的,XSLt不知道实体引用是否被使用,因此无法保留它们。如果您不希望非ascii字符显示为字符,那么最简单的解决方案是指定编码,例如
<xsl:output encoding="US-ASCII"/>
然后任何非ascii字符将被编码为十进制或十六进制数字引用,因此版权将以©
而不是©(假设您的输出实际上是由XSLT序列化)。