3

到目前为止,我在我的 Android 应用程序中使用DOMSource将 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

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

4

1 回答 1

1

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

对当前代码的一项改进是更改行

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

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

由于您在方法结束时无论如何都要删除换行符,因此在输出中请求额外的缩进并不是很有用。这是一件小事,但如果您的 XML 中有很多标签(因此,换行符和缩进的空格),可能会稍微减少您的内存需求。

于 2013-04-10T05:06:21.490 回答