3 回答

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

TA贡献2037条经验 获得超6个赞
在处理格式错误的XML时,这个代码位确实启发了我处理另一个类似的问题,所以我在这里分享它。
请不要编辑下面的内容,因为它是原来的网站。
XML格式,要求在文档中声明的唯一根元素是有效的。因此,例如,一个有效的XML是:
<root> <element>...</element> <element>...</element></root>
但如果你有这样的文件:
<element>...</element><element>...</element><element>...</element><element>...</element>
这将被认为是格式错误的XML,因此许多XML解析器只是抛出一个异常,抱怨没有根元素。等。
在本例中,有一个解决方案,说明如何解决该问题,并成功地解析上面格式错误的XML。
基本上,我们要做的是以编程方式添加根元素。
因此,首先您必须打开包含“畸形”XML(I)的资源。e。(档案):
File file = new File(pathtofile);
然后打开FileInputStream:
FileInputStream fis = new FileInputStream(file);
如果我们尝试用任何XML库解析这个流,那么我们就会引发格式错误的文档异常。
现在,我们创建了一个InputStream对象的列表,它有三个级别:
一个ByteIputStream元素,它包含字符串:“我们的FileInputStream-具有字符串的ByteInputStream:”所以代码如下:
List<InputStream> streams = Arrays.asList( new ByteArrayInputStream("<root>".getBytes()), fis, new ByteArrayInputStream("</root>".getBytes()));
现在,使用SequenceInputStream,为上面创建的列表创建一个容器:
InputStream cntr = new SequenceInputStream(Collections.enumeration(str));
现在,我们可以在CNTR上使用任何XMLParser库,并且它将被解析,没有任何问题。(与StAX库核对);
添加回答
举报