【发布时间】:2010-11-30 13:47:00
【问题描述】:
我在将特定字符从 XML 提要转换为 XHTML 时遇到问题。
我用下面的例子来演示这个问题。
这是我的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<paragraph>some text including the –, ã and ’ characters</paragraph>
这是我正在应用的 XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
encoding="UTF-8"
indent="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<xsl:template match="paragraph">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<p><xsl:apply-templates/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这是生成的 XHTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head></head>
<body>
<p>some text including the –, ã and ’ characters</p>
</body>
</html>
原始 XML 中的字符正在被新字符替换。
首先我想检查一下我的编码是否有问题导致了这个问题?
如果我想映射特殊字符以在 XHTML 中正确显示,我应该使用实体来做某事吗?如果是这样,我如何在 XSLT 中使用它们?我是否需要提前知道我的 XML 提要中可能存在的每个可能的值?
【问题讨论】:
-
生成的 XHTML 看起来很像一个 UTF-8 文件,该文件是用一个需要 ISO-8859-1 或类似 8 位格式的编辑器打开的(双倍的字符会泄露它)。使用十六进制转储查看它,我敢打赌您会看到转换按预期工作。