为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Qyouu 2019-09-02 20:07:57
我正在使用Xerces的Sax Parser解析XML文件。是否<?xml version="1.0" encoding="UTF-8"?>需要XML声明?
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

在XML 1.0中,XML声明是可选的。请参阅XML 1.0建议书的第2.8节,其中说“应该”使用它 - 这意味着它是推荐的,但不是强制性的。但是,在XML 1.1中,声明是强制性的。请参阅XML 1.1建议书的第2.8节,其中说“必须”使用。它甚至继续说明如果声明不存在,那自动意味着文档是XML 1.0文档。


请注意,在XML声明中,encoding和standalone都是可选的。只有version强制性。此外,这些不是属性,所以如果它们存在,它们必须按顺序:version,然后是any encoding,然后是any 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 Recommendation描述了一种可以自动检测字符编码的方法。实际上,如果输入编码为UTF-8,UTF-16或US-ASCII,这不是什么大问题。当遇到使用US-ASCII范围之外的字符的8位编码(例如ISO 8859-1)时,自动检测不起作用 - 如果可以,请避免创建这些编码。


的standalone指示是否将XML文档可以在没有DTD或无法正确处理。人们很少使用它。如今,如果没有DTD,设计缺少信息的XML格式是不好的。


更新:


“prolog错误/无效的utf-8编码”错误表示解析器在文件中找到的实际数据与XML声明所说的编码不匹配。或者在某些情况下,文件中的数据与自动检测的编码不匹配。


由于您的文件包含字节顺序标记(BOM),因此它应采用UTF-16编码。我怀疑你的声明说明<?xml version="1.0" encoding="UTF-8"?>当文件被NotePad改成UTF-16时,这显然是不正确的。简单的解决方案是删除encoding并简单地说<?xml version="1.0"?>。您也可以编辑它来说encoding="UTF-16"但是原始文件(不是UTF-16)或者文件以某种方式变回UTF-8或其他编码时会出错。


不要试图删除BOM - 这不是问题的原因。使用NotePad或写字板编辑XML是真正的问题!


查看完整回答
反对 回复 2019-09-02
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

Xml声明是可选的,因此你的xml没有它就可以很好地形成。但建议使用它,以便解析器不会做出错误的假设,特别是关于所使用的编码。


查看完整回答
反对 回复 2019-09-02
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

如果你不使用默认值时才需要versionencoding(你是在该示例)。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 959 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信