XSLT转换HTML为XML时,XML声明未输出encoding属性问题咨询
问题描述
我需要生成包含encoding属性的XML声明,期望格式:
<?xml version="1.0" encoding="UTF-8"?>
使用以下XSLT代码将HTML转换为XML:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no" indent="yes"/> <xsl:template match="/"> </xsl:template> </xsl:stylesheet>
但执行后得到的XML声明仅为:
<?xml version="1.0"?>
请问如何配置才能让XML声明正确输出encoding属性?
解决方法
- 确认输出目标类型:如果XSLT处理器将结果输出到内存字符串,部分处理器会省略encoding属性(因为字符串本身不携带编码信息)。此时需将结果输出到文件或字节流,处理器会根据
encoding配置自动补充属性。 - 检查处理器特性:不同XSLT处理器(如Xalan、Saxon)对
xsl:output的处理逻辑有差异。例如部分处理器在输出到控制台时不会显示encoding,但写入文件时会正常生成。 - 显式添加standalone属性:尝试在
<xsl:output>中加入standalone="yes"(或no),部分处理器会因该属性的存在,完整输出包含encoding的XML声明:<xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no" indent="yes" standalone="yes"/> - 补充模板内容:当前模板
match="/"为空,仅会输出XML声明(若生效)。若需处理HTML内容,需完善模板逻辑以输出节点,但这不影响encoding属性的生成。
内容的提问来源于stack exchange,提问作者MagicWorld
相关产品推荐
相关产品推荐

