【发布时间】:2014-05-13 07:57:38
【问题描述】:
我正在读取一个我无法控制其格式的 XML 配置文件,我需要的数据位于最后一个元素中。不幸的是,该元素是一个 base64 编码的序列化 Java 类(是的,我知道),长度为 31200 个字符。
一些实验似乎表明,如果我只是将文件读入字符串并打印出来,Java XML/XPath 库不仅看不到此元素中的值(它们默默地将值设置为空白字符串)为了控制台,所有内容(甚至是 next 行上的结束元素)都会被打印出来,但不是这个元素。
最后,如果我手动进入文件并将行分成行,Java 可以看到该行,尽管这显然会破坏 XML 解析和反序列化。这也不实用,因为我想制作一个可以跨许多此类文件工作的工具。
Java 中是否有一些行长限制会阻止此工作?我可以通过第三方库解决它吗?
编辑:这是与 XML 相关的代码:
FileInputStream fstream = new FileInputStream("path/to/xml/file.xml");
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = db.parse(fstream);
String s = XPathFactory.newInstance().newXPath().compile("//el1").evaluate(d);
【问题讨论】:
-
好吧,行限制是
Integer.MAX_VALUE,因为这是.length()的最大可能值,但在这种情况下它并没有真正的帮助。 -
你用的是什么库?您如何阅读文件(DOM、SAX、STaX)?例如,JAXP 有 a number of properties 控制可以读取的某些 XML 结构的最大大小,这可能与您的情况相关。
-
我使用的是 DOM,只是基本的 DocumentBuilder API。添加上面的代码。
-
您是否检查过
d是否包含所需的值,或者至少包含名为<el1>的元素?