2013-04-09 64 views
3

直到现在我用DOMSource的 XML文件转换成字符串,在我的Android应用程序。XML节点至字符串转换为冬季大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; 
} 

是为小型XML文件做工精细。

大型XML这个代码开始抛出的OutOfMemoryError

什么可能是背后的原因以及如何纠正这个问题?

+0

有多大XML? – 2013-04-09 11:34:15

+0

它可能会达到10-15 MB。 – 2013-04-10 04:21:20

回答

1

首先:如果您只需要XML作为字符串,并且没有将Node用于其他任何内容,则应该使用StAX(Streaming API for XML),因为它具有更低的内存占用量。您会在标准库的javax.xml.stream包中找到StAX。

一个改进当前的代码将更改线路

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

transformer.setOutputProperty(OutputKeys.INDENT, "no"); 

既然你在方法结束反正去除换行,这不是非常有用在输出中请求额外的缩进。这是一件小事,但如果在XML中有很多标签(因此缩进的换行符和空白),可能会减少一些内存需求。