Дайджест: тип элемента "пользователь" должен заканчиваться соответствующим конечным тегом "</user>" - PullRequest
2 голосов
/ 03 мая 2011

Я использую Digester для анализа XML-файла и получаю следующую ошибку:

May 3, 2011 6:41:25 PM org.apache.commons.digester.Digester fatalError
SEVERE: Parse Fatal Error at line 2336608 column 3: The element type "user" must be terminated by the matching end-tag "</user>".
org.xml.sax.SAXParseException: The element type "user" must be terminated by the matching end-tag "</user>".

Однако 2336608 - последняя строка моего текстового файла.Я предполагаю, что открываю тег и никогда не закрываю его.Вы знаете, как я могу найти и исправить это в больших текстовых файлах?

спасибо

Ответы [ 4 ]

2 голосов
/ 03 мая 2011

Напишите другой скрипт, который сканирует каждый файл строки и всякий раз, когда он находит открытый тег <user>, увеличивает счетчик и печатает

line number 1234 <user> opened (1 open total)

и всякий раз, когда он находит закрывающий тег </user>, уменьшаетсясчетчик печатает

line number 4546 </user> closed (0 open total)

Так как у вас есть еще один открывающий тег, чем закрывающий тег, окончательный результат этого скрипта сообщит вам, что 1 тег остался открытым.Однако, предполагая, что ваша модель XML не допускает вложенные теги <user>, вы можете предположить, что проблемное объявление находится там, где вы видите вывод line number ... <user> opened (2 open total).

1 голос
/ 05 мая 2011

$ grep -Hin "</\?user>" Text.xml распечатает каждую строку либо с, либо. Если они не являются вложенными, то вы должны быть в состоянии проверить, что выходной файл и найти отсутствующий тег закрытия (когда сразу следует. Сценарий делает то же самое:

https://gist.github.com/953837

Предполагается, что теги открытия и закрытия находятся на разных строках.

1 голос
/ 03 мая 2011

Используйте tidy -xml -e <your-xml-file>. http://tidy.sourceforge.net/

Tidy - отличный маленький инструмент для проверки HTML, и в режиме XML (-xml выше) он также будет проверять XML.

Распечатывает номера строк и столбцов для ошибок разбора.

Большинство основных менеджеров пакетов (apt, port и т. Д.) Будут иметь предварительно собранные пакеты для него.

0 голосов
/ 01 ноября 2011

Я думаю, что нет необходимости запускать сценарии для обнаружения ошибок XML. Например, вы можете использовать валидатор w3 xml http://www.w3schools.com/xml/xml_validator.asp

Я просто вставил туда 15-мегабайтный XML-файл, и мне удалось довольно легко это исправить. Вы также можете ввести XML как URL, если у вас есть возможность загрузить его куда-нибудь. Java сообщила об ошибке в каком-то месте, которая выглядела нормально, но этот инструмент локализовал фактическую ошибку, и после ее исправления java больше не выдавал ошибку.

Существует много типов ошибок XML, и они не все связаны с вложенной структурой, поэтому для этого лучше всего использовать хорошо известный инструмент. Например, моя ошибка была ошибкой аргумента (я пропустил "), но Java обнаружил проблему с вложенностью.

...