我在我的代码中使用以下类来解析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数据的某一点
我无法摆脱这个错误。请帮帮我。
答案 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
来允许更多堆栈。如果确实存在无限递归,调试器将在堆栈上反复显示相同的内容。