我无法将特定字符从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中的每个可能值?
答案 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吗?将它放在序言中是一回事,但文件本身可能正在使用其他编码。