Разбор xml, содержащий символьную ссылку - PullRequest
2 голосов
/ 14 апреля 2010

XML, который я пытаюсь проанализировать, содержит управляющий символ 0x2 внутри CDATA. Я попытался заменить его ссылкой на символ, что привело к тому, что CDATA выглядело так:

CDATA section----charcter reference----CDATA section

Теперь, если я пытаюсь разобрать его, я получаю сообщение об ошибке: org.xml.sax.SAXParseException: содержимое не разрешено в прологе.

Оригинальный XML выглядит так:

<?xml version="1.1" encoding="UTF-16"?><CELL><![CDATA[ABCD&#2;EFGH]]></CELL>

Я изменил его на:

<?xml version="1.1" encoding="UTF-16"?><CELL><![CDATA[ABCD]]>&#2;<![CDATA[EFGH]]></CELL>

1 Ответ

0 голосов
/ 19 января 2011

Определения сущностей не разрешены в разделах CDATA, поэтому ваш оригинальный пример не работает. То, что модифицированный пример не работает, по-моему, является ошибкой SAX-парсера. Возможно, синтаксический анализатор SAX не разрешает невидимую метку порядка байтов (BOM) до пролога XML, начинающегося с <?, Но парсер SAX должен. </p>

Чтобы помочь синтаксическому анализатору SAX, в конечном итоге подойдет следующий обходной путь. А именно, потребляет спецификацию перед тем, как кормить анализатор. Вы можете использовать маркируемый поток для этой цели, то есть пометить поток, прочитать спецификацию, сбросить поток до его метки, если не было спецификации. Я не пытался, это только предположение.

Кстати: ваш вопрос был бы лучше воспринят, если бы вы исправили опечатку во вступлении: напишите «ссылка на символ» вместо «ссылка на символ». Сначала я подумал, что пропущенный a связан с вашим вопросом.

...