我是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.
答案 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文件。如果可能,通过将(编码的)二进制数据放入其自己的元素中来修复它。