当一个巨大的XML文档格式不正确时该怎么办(Java)

时间:2013-11-24 21:13:21

标签: java xml parsing sax

我正在使用Java SAX解析器来解析从大约3 GB的第三方源发送的XML数据。由于XML文档格式不正确,我收到错误:不允许匹配“[xX] [mM] [lL]”的处理指令目标。

据我了解,这通常是由于角色不应该出现在某个地方。

主要问题:由于尺寸非常大,无法手动编辑这些文件。

我想知道是否有一个非常大的文件的解决方法,无法手动打开和编辑(由于它们的大小),并且如果有一种方法对其进行编码以便它可以删除任何有问题的字符自动。

2 个答案:

答案 0 :(得分:3)

我认为最可能的解释是该文件包含多个XML文档的串联,或者可能是嵌入式XML文档:无论哪种方式,都是不在文件开头的XML声明。

现在很多都取决于您与坏数据供应商的关系。如果他们向您发送了有缺陷的设备或有缺陷的软件,您可能会抱怨并要求他们修复它。但是,如果您与第三方没有服务关系,您必须更换供应商或尽可能使用错误输入,这意味着您自己修复故障。通常,除非您知道要查找的是哪种类型的错误,否则无法修复错误的XML,并且很难确定文件是否很大(或者如果失败的情况非常少)。

数据不是XML,因此不要尝试使用XML工具来处理它。使用文本处理工具,如sed或awk。第一步是在文件中搜索<?xml的出现次数,看看是否有任何提示。

答案 1 :(得分:0)

如果声明位于文档的开头,则会发生此错误。原因可能是

  1. XML声明之前的空格
  2. XML声明之前的任何隐藏字符
  3. XML声明出现在文档的任何其他位置
  4. 您应该开始检查案例#2,请参阅此处:http://www.w3.org/International/questions/qa-byte-order-mark#remove

    如果这没有帮助,您应该从文档中删除前导空格。您可以将原始InputStream与另一个InputStream包装在一起,并使用它来删除空格。

    如果您遇到案例#3,也可以这样做,但实施会有点复杂。

相关问题