我使用Xerces的Sax Parser解析XML文件。
是否需要xml声明?
是否需要xml声明?
在XML 1.0中,XML声明是可选的。见
section 2.8 of the XML 1.0 Recommendation,它说它“应该”使用 – 这意味着它是建议,但不是强制性的。但是,在XML 1.1中,声明是强制性的。参见
section 2.8 of the XML 1.1 Recommendation,其中说“必须”使用。它甚至继续声明如果声明不存在,那自动意味着文档是XML 1.0文档。
请注意,在XML声明中,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建议书描述了一种可能的方式character encoding can be autodetected.在实践中,如果输入被编码为UTF-8,UTF-16或US-ASCII,这不是什么大问题。当遇到使用US-ASCII范围之外的字符(例如ISO 8859-1)的8位编码时,自动检测不工作 – 如果可以,请避免创建这些字符。
独立指示是否可以在没有DTD的情况下正确处理XML文档。人们很少使用它。现在,设计一个缺少没有DTD的信息的XML格式是一个不好的事。
更新:
“prolog错误/无效的utf-8编码”错误表示解析器在文件中找到的实际数据与XML声明所说的编码不匹配。或者在某些情况下,文件中的数据与自动检测的编码不匹配。
由于您的文件包含字节顺序标记(BOM),因此应采用UTF-16编码。我怀疑你的声明说<?xml version =“1.0”encoding =“UTF-8”?>当文件通过NotePad更改为UTF-16时,这显然不正确。简单的解决方案是删除编码,并简单地说<?xml version =“1.0”?> ;.你也可以编辑它,说encoding =“UTF-16”,但这将是错误的原始文件(这不是在UTF-16),或者如果文件以某种方式被改回回到UTF-8或一些其他编码。 不要打扰尝试删除BOM – 这不是问题的原因。使用NotePad或写字板编辑XML是真正的问题!