2013-04-09 65 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中有很多標籤(因此縮進的換行符和空白),可能會減少一些內存需求。