有效的XML文件是否需要xml声明?

前端之家收集整理的这篇文章主要介绍了有效的XML文件是否需要xml声明?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Xerces的Sax Parser解析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”?&gt ;.你也可以编辑它,说encoding =“UTF-16”,但这将是错误的原始文件(这不是在UTF-16),或者如果文件以某种方式被改回回到UTF-8或一些其他编码。 不要打扰尝试删除BOM – 这不是问题的原因。使用NotePad或写字板编辑XML是真正的问题!

猜你在找的XML相关文章