在java中解析XML文件时出错

时间:2011-12-27 10:37:56

标签: java xml dom sax stack-overflow

我在我的代码中使用以下类来解析3.43MB的大量XML数据并尝试将节点值检索到哈希表中。

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

我的代码在这里抛出错误:

String nodeValue=node.getNodeValue();

Error is:


Exception in thread "main" java.lang.StackOverflowError
    at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeValueString(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeValueString(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.DeferredTextImpl.synchronizeData(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.CharacterDataImpl.getNodeValue(Unknown Source)

即使它尝试在控制台中打印数据,如下所示:

System.out.println(node.getNodeValue());

错误是这样的:

Exception in thread "main" java.lang.StackOverflowError
    at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeValueString(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeValueString(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.DeferredTextImpl.synchronizeData(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.CharacterDataImpl.getNodeValue(Unknown Source)  

我认为node.getNodeValue()无法读取XML数据的某一点 我无法摆脱这个错误。请帮帮我。

4 个答案:

答案 0 :(得分:0)

你碰巧使用(无限)递归吗?

或者可能是损坏的xml文件? (尝试用您喜欢的浏览器打开它)

答案 1 :(得分:0)

一个3.4 MB的文件并不大,但如果它包含大量嵌套术语,那么你使用的库可能无法应对。例如HTML页面可能包含许多不匹配的标记,这可能导致XML解析器以这种方式失败。

e.g。

<html><body><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> etc

几百或几千<br>可能足以耗尽堆栈。

答案 2 :(得分:0)

至于我理解Node.getNodeValue()不会递归。它只打印当前节点的值,这是一个字符串。这可能是数据和您的代码相关的错误。

发布您的代码和XML结构(如果不是完整的xml)将有所帮助。

或者,您可以尝试使用SAX解析器。

答案 3 :(得分:0)

您可能只需要使用-XssSOMETHING来允许更多堆栈。如果确实存在无限递归,调试器将在堆栈上反复显示相同的内容。