我正在使用Xerces的Sax解析器解析一个XML文件。
XML声明
<?xml version="1.0" encoding="UTF-8"?>
是否是必需的?<?xml version="1.0" encoding="UTF-8"?>
是否是必需的?encoding
和standalone
都是可选的。只有version
是必需的。此外,它们不是属性,因此,如果它们存在,则必须按照以下顺序排列:version
,后跟任何encoding
,后跟任何standalone
。<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
如果您不以这种方式指定编码,XML解析器将尝试猜测使用的编码方式。 XML 1.0建议书描述了一种可能的字符编码自动检测方法。实际上,如果输入以UTF-8、UTF-16或US-ASCII编码,这并不是什么大问题。当遇到使用US-ASCII范围之外的字符(例如ISO 8859-1)的8位编码时,自动检测就无法正常工作 - 如果可以避免创建这些编码,则应该避免。
standalone
表示XML文档在没有DTD的情况下能否被正确处理。人们很少使用它。现在,设计一个XML格式,缺少其DTD中的信息是不好的。<?xml version =“1.0”encoding =“ UTF-8”?>
,这显然是不正确的,因为文件已被NotePad更改为UTF-16。简单的解决方案是删除encoding
并仅写<?xml version =“1.0”?>
。您也可以将其编辑为encoding =“UTF-16”
,但对于原始文件(不在UTF-16中)或如果文件以某种方式被更改回UTF-8或其他编码,则这将是错误的。XML声明是可选的,所以没有它你的XML也可以是格式良好的。但建议使用它,以免解析器对所使用的编码做出错误的假设。
只有在您没有使用默认值 version
和 encoding
时才需要此步骤(在该示例中您已经使用了这些默认值)。