Разметка должна быть правильно сформирована

Прежде всего, позвольте мне сказать, что я новичок в SAX и Java.

Я пытаюсь прочитать информацию из неправильно сформированного XML-файла.

Когда я пытаюсь использовать SAX или DOM Parser, я получаю в ответ следующую ошибку:

The markup in the document following the root element must be well-formed.

Вот как я настроил свой XML-файл:

<format type="filename" t="13241">0;W650;004;AG-Erzgeb</format>
<format type="driver" t="123412">001;023</format>
   ...

Могу ли я заставить SAX или DOM анализировать файлы XML, даже если они не являются правильно сформированными XML?

Спасибо за помощь. Очень признателен. Хайтем


person Haythem    schedule 23.03.2010    source источник
comment
К вашему сведению: По определению... Если он неправильно сформирован, это не XML. en.wikipedia.org/wiki/XML#Правильность_и_обработка ошибок   -  person Chris Nava    schedule 23.03.2010


Ответы (3)


Лучше всего сделать XML правильно сформированным, возможно, немного предварительно обработав его. В этом случае вы можете добиться этого, просто поместив объявление XML (и даже это необязательно) и предоставив корневой элемент (который не является необязательным), например:

<?xml version="1.0"?>
<wrapper>
    <format type="filename" t="13241">0;W650;004;AG-Erzgeb</format>
    <format type="driver" t="123412">001;023</format>
</wrapper>

Там я произвольно выбрал имя «обертка» для корневого элемента; это может быть что угодно.

person T.J. Crowder    schedule 23.03.2010
comment
Я просто хотел бы добавить, что вам не обязательно делать эту модификацию на диске, но вы можете сделать это на лету, предоставив фильтрацию InputStream/Reader. Особенно для больших файлов (или чтения XML из URL) это может быть очень полезно. Здесь может быть полезен SequenceInputStream: java.sun.com /javase/6/docs/api/java/io/SequenceInputStream.html - person Joachim Sauer; 23.03.2010
comment
Хорошая возможность. не проще парсить?. могу ли я отключить метод parse() и перезаписать его, чтобы игнорировать неправильно сформированный статус? - person Haythem; 23.03.2010
comment
Хэйтем: возможно, нет, потому что синтаксический анализатор находится глубоко внутри библиотеки, и поведение такого браузера будет неопределенным (библиотеки XML не знают, как обрабатывать XML с более чем одним корневым элементом). Если вы сделаете это таким образом, ваш XML мгновенно станет правильно сформированным, и все инструменты, поддерживающие XML, смогут с ним справиться (при условии, что у вас нет других неправильных частей). - person Joachim Sauer; 23.03.2010

Подсказка: используя sax или stax, вы можете успешно анализировать неправильно сформированный XML-документ до тех пор, пока не встретится ПЕРВАЯ ошибка "правильно сформированного".

(Я знаю, что это не слишком помогает...)

person Yaneeve    schedule 23.03.2010

Поскольку DOM просканирует ваш xml-файл, а затем построит дерево, корневой узел дерева похож на 1 ответ. Однако, если синтаксический анализатор не может найти или даже , он может даже построить дерево. Итак, лучше предварительно обработать файл xml, прежде чем анализировать его с помощью DOM или Sax.

person jasonfungsing    schedule 23.03.2010