SAXParseException, когда «используется в XML - PullRequest
0 голосов
/ 14 октября 2011

Я получаю «org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 26; Объект« ldquo »был указан, но не объявлен». исключение при чтении документа XML. Я читаю это следующим образом:

                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                InputSource is = new InputSource(new StringReader(xmlBody));
                Document document = builder.parse(is);

И еще есть исключение для builder.parse (is); По результатам поиска я понял, что необходимо объявить некоторые из этих новых объектов извне, к сожалению, я не могу изменить исходный документ XML.

Как мне решить эту проблему?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 октября 2011

По результатам поиска я решил, что необходимо объявить некоторые из этих новых объектов извне, к сожалению, я не могу изменить исходный документ XML.

Что ж, если вы не объявите сущность, то документ не является XML, и вы не сможете обработать его с помощью анализатора XML.

Когда вас просят обработать ввод, который не является правильно сформированным XML, лучшим подходом является исправление процесса, который создал документ (вся идея использования XML для обмена опирается на то, что он является правильно сформированным XML). Альтернативы состоят в том, чтобы «восстановить» документ, чтобы превратить его в правильно сформированный XML (что вы говорите, что вы не можете сделать), или забыть тот факт, что он был задуман как XML, и обращаться с ним так же, как с любым другим -XML формат.

Не очень приятный выбор - но это тот бардак, в который вы попадаете, когда люди платят XML за слово, но не соответствуют букве стандарта.

0 голосов
/ 14 октября 2011

Попробуйте

factory.setExpandEntityReferences(false);

Это предотвратит попытку синтаксического анализатора расширить сущности.

РЕДАКТИРОВАТЬ: Как насчет этого http://xerces.apache.org/xerces2-j/features.html#dom.create-entity-ref-nodes - В верхней части этой страницы приведен пример того, как установить функции в базовом парсере. Это должно заставить синтаксический анализатор создавать узлы DOM со ссылкой на сущность, а не пытаться расширять сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...