0

我有一个 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.
4

2 回答 2

2

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

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

$ 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 -
于 2013-05-26T13:18:08.763 回答
0

您可以尝试使用不会读取整个文档的 SAX 解析器。只需阅读元素/属性,直到您拥有所需的内容,然后停止。

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

于 2013-05-26T13:19:48.883 回答