Получение ошибки при разборе XML-файла в Java - PullRequest
0 голосов
/ 27 декабря 2011

Я использую следующие классы в своем коде для анализа огромных данных XML размером 3,43 МБ и пытаюсь извлечь значения узлов в хеш-таблицу.

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 голосов
/ 27 декабря 2011

Возможно, вам просто нужно использовать -XssSOMETHING, чтобы увеличить стек. Если рекурсия действительно бесконечная, отладчик будет показывать вам одни и те же вещи снова и снова в стеке.

0 голосов
/ 27 декабря 2011

Файл 3,4 МБ не такой большой, однако, если он содержит много вложенных терминов, используемая вами библиотека может не справиться с этим.например, на HTML-странице может быть много несопоставленных тегов, и это может привести к сбою синтаксического анализатора XML.

например

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

Несколько сотен или тысяч <br> может быть достаточноисчерпать стек.

0 голосов
/ 27 декабря 2011

Насколько я понимаю, Node.getNodeValue () не будет проходить через. Он просто печатает значение текущего узла, который является строкой. Это могут быть данные и ваша ошибка, зависящая от кода.

Поможет опубликовать ваш код и структуру XML (если не полный xml).

Кроме того, вы можете попробовать использовать SAX-парсер.

0 голосов
/ 27 декабря 2011

Вы случайно не используете (бесконечную) рекурсию?

Или, возможно, поврежденный XML-файл?(попробуйте открыть его в своем любимом браузере)

...