繁体   English   中英

在Java中解析XML文件时出现错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM