Java使用附加数据解析xml文件

时间:2013-05-26 12:28:24

标签: java xml xml-parsing

我是xml文件,如下所示:

<Header>
  <Type>TestType</Type>
  <Owner>Me</Owner>
</Header>
ĺß™¸Ű;?źÉćáţ¬=ńgăűßEŶáCórýjąŞŢđ·I_§Ä†ÉD¤ďsĂŢŘö¤xi¦Ö†5ÚPMáx^š‡âő

那些有趣的字母是二进制编码数据。

解析它时遇到了麻烦。我想要做的就是在Header之后读取Type和Owner节点以及数据的值。那些数据可能很大。它基本上是xml,后面附加了数据。标题始终以并以...结尾。其中的子节点数可以更改

我尝试过简单的解析:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(f);

我得到的是:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence.

2 个答案:

答案 0 :(得分:2)

为了由XML解析器处理,文件必须是well formed并且可选地有效(后者需要针对描述预期标记格式的“模式”进行测试)。

在这种情况下,您的文档格式不正确:

$ xmllint --noout File1.xml
File1.xml:5: parser error : Extra content at the end of the document
ĺß™¸Ű;?źÉćáţ¬=ńgăűßEŶáCórýjąŞŢđ·I_§Ä†ÉD¤ďsĂ
^

我建议找一些方法来删除有问题的字符,然后处理格式正确的XML。例如,假设XML位于文件的前4个文件中:

head -n 4 File1.xml | xmllint --noout -

答案 1 :(得分:0)

您可以尝试使用SAX解析器,而不是在整个文档中读取。只需读入元素/属性,直到得到你想要的东西,然后停止。

但这不是一个格式良好的XML文件。如果可能,通过将(编码的)二进制数据放入其自己的元素中来修复它。