通过涉及特殊字符的XSL转换输出HTML

时间:2009-09-22 21:48:09

标签: html xml xslt xhtml

我无法将特定字符从XML Feed转换为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 Feed中的每个可能值?

2 个答案:

答案 0 :(得分:10)

我同意kdgregory:输出文件看起来是UTF-8,但它的读者认为它是其他东西(ISO-8859-1或CP-1252(Windows的默认设置))。尝试直接在HTML头元素中添加内容类型:

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

看看是否有帮助。

答案 1 :(得分:0)

这可能听起来很愚蠢,但你确定xml文件实际上是utf-8吗?将它放在序言中是一回事,但文件本身可能正在使用其他编码。