[英]Getting error while parsing an XML file in java
我在代码中使用以下类来解析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数据的特定位置读取。
我无法摆脱这个错误。 请帮我。
您是否碰巧使用(无限)递归?
还是损坏的xml文件? (尝试使用您喜欢的浏览器打开它)
一个3.4 MB的文件不是很大,但是,如果它包含许多嵌套术语,则您正在使用的库可能无法解决该问题。 例如,HTML页面可能包含许多不匹配的标记,这可能会导致XML解析器以这种方式失败。
例如
<html><body><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> etc
数百或数千个<br>
足以耗尽堆栈。
据我了解,Node.getNodeValue()不会递归通过。 它只是打印当前节点的值,它是一个字符串。 这可能是数据和代码相关的错误。
发布您的代码和XML结构(如果不是完整的xml)会有所帮助。
或者,您可以尝试使用SAX解析器。
您可能只需要使用-XssSOMETHING
来允许更多堆栈。 如果确实存在无限递归,则调试器将一遍又一遍地向您展示相同的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.