到目前为止我一直在使用DOM源在我的 Android 应用程序中将 XML 文件转换为字符串。
这是我的代码 :
public String convertElementToString (Node element) throws TransformerConfigurationException, TransformerFactoryConfigurationError
{
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//initialize StreamResult with File object to save to file
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(element);
try {
transformer.transform(source, result);
}
catch (TransformerException e) {
Log.e("CONVERT_ELEMENT_TO_STRING", "converting element to string failed. Aborting", e);
}
String xmlString = result.getWriter().toString();
xmlString = xmlString.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "");
xmlString = xmlString.replace("\n", "");
return xmlString;
}
This 对于小的 xml 工作得很好 files.
But for 大尺寸 xml这段代码开始抛出内存不足错误.
其背后的原因可能是什么以及如何纠正这个问题?
首先:如果您只需要 XML 作为字符串,并且不使用Node
对于其他任何事情,你应该使用 StAX (XML 流式 API http://docs.oracle.com/javase/tutorial/jaxp/stax/index.html)相反,因为它的内存占用要低得多。您会在以下位置找到 StAXjavax.xml.stream
标准库的包。
对当前代码的一项改进是更改该行
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
to
transformer.setOutputProperty(OutputKeys.INDENT, "no");
由于无论如何您都会在方法末尾删除换行符,因此在输出中请求额外缩进并不是很有用。这是一件小事,但如果 XML 中有很多标签(因此,换行符和用于缩进的空格),可能会稍微减少您的内存需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)