java - 回复 : Big XML file

标签 java xml memory sax

Big XML File 的跟进问题:

首先非常感谢您的回答。 之后……我做错了什么? 这是我使用 SAX 的类(class):

public class SAXParserXML extends DefaultHandler {
  public static void ParcourXML() {

      DefaultHandler handler = new SAXParserXML();
      SAXParserFactory factory = SAXParserFactory.newInstance();
      try {
          String URI = "dblp.xml";
          SAXParser saxParser = factory.newSAXParser();
          saxParser.parse(URI,handler);
      } catch (Throwable t) {
     t.printStackTrace ();
       }
  }



  public void startElement (String namespaceURI,String simpleName,String qualifiedName,Attributes attrs) throws SAXException {
  }
  public void endElement (String namespaceURI,String simpleName,String qualifiedName) throws SAXException {

  }
}

你可以看到我没有对我的 XML 文件做任何事情但是它给出了这个错误:

java.lang.OutOfMemoryError: Java heap space
    at com.sun.org.apache.xerces.internal.util.XMLStringBuffer.append(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.refresh(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.invokeListeners(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.peekChar(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at SAXParserXML.ParcourXML(SAXParserXML.java:30)
    at Main.main(Main.java:28)

我也试过 Stax……同样的错误……我该怎么办? 此外,我将 Java 堆大小增加到 1260M

java -Xmx1260M SAXParserXML

XML 文件具有这种形式:

<dblp> 
   <incollection> 
      <author>... </author> 
      .... 
      <author>... </author> 
      #other tags-i'm interested only by <author>#
      ... 
   </incollection> 
   <incollection> 
   # the same thing# 
   </incollection> 
   .... 
</dblp> 

您可以找到原始文件:http://dblp.uni-trier.de/xml/

谢谢

最佳答案

有一个 bug对于 Java 1.6,它显示了完全相同的堆栈跟踪,并且到目前为止尚未修复。较新的 Xerces 版本似乎没问题。

对于这么大的文档,其中仍然包含相当多的结构,您可以考虑使用拉式解析,即部分结构的解析,例如 StAX .

关于java - 回复 : Big XML file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/508878/

相关文章:

xml - 如何将我的 XML 字符串发布到 Web 服务而不是 xml 文件

c# - 在 C# 中读取 XML

java - Java 中的空格和换行符是否被视为字节?

c# - c#中类实例的内存使用

java - Android Java 在 BaseAdapter 中创建新线程不起作用

java - 算法复杂度和效率,指数运算java

c++ - 如何处理 GetText() 返回的 tinyxml 空指针

java - JVM 前 4 个 boolean 值优化,而不是第 5 个

java - JSF 中值的逻辑

java - setContextClassLoader 的含义