0

我得到了一个包含大约 10000 多行数据的大型 SOAP 响应,并且正在从 CDATA 中提取相关数据并插入到数据库中。

代码如下所示:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setCoalescing(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = new ByteArrayInputStream(resp.getBytes());
Document doc = db.parse(is);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(fetchResult);
String result = (String) expr.evaluate(doc, XPathConstants.STRING); 

resp 包含 SOAP 响应 fetchResult 是

String fetchResult = "//result/text()";

我在最后一行收到 OutofMemory 错误。我确实尝试将堆大小增加到 1.2 GB,但这也没有用。

你们中的任何人都可以帮我吗?

4

1 回答 1

0

将文档作为流处理,而不是将整个响应作为Document. 您现在拥有的代码在内存中构建表示文档的结构,然后尝试在其上计算 XPath 表达式。

一种更节省内存的方法是使用SAX解析器(请参阅此处)。通过使用 SAX 解析器,您将根据需要在整个文档中进行流式传输,随时将文档的一小部分保留在内存中。

于 2013-06-17T08:10:42.997 回答