Экспат синтаксического анализа XML в данных обработки Python

StackOverflow https://stackoverflow.com/questions/1145015

Вопрос

Я пытаюсь проанализировать файл XML с помощью Python Expat.У меня есть следующая строка в моем XML-файле:

<Action>&lt;fail/&gt;</Action>

expat идентифицирует начальный и конечный теги, но преобразует & lt;для символа «меньше» и того же для символа «больше» и, таким образом, анализирует его следующим образом:

исход:

START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'

вместо желаемого:

START 'Action'
DATA '&lt;fail/&gt;'
END 'Action'

Я хотел бы добиться желаемого результата, как мне не допустить, чтобы экспат напортачил?

Это было полезно?

Решение

эмигрант не портит, &lt; это просто XML-кодировка символа <.Совсем наоборот, если бы экспат возвращал буквальное значение &lt;, это будет ошибкой по отношению к спецификации XML.При этом вы, конечно, можете вернуть экранированную версию, используя xml.sax.saxutils.escape:

>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'&lt;fail/&gt;'

Парсер expat также может сообщать все строковые данные в любых фрагментах, которые кажутся подходящими, поэтому вам придется объединить их самостоятельно.

Другие советы

Синтаксические анализаторы SAX и StAX могут разбивать строки любым удобным для них способом (хотя у StAX есть режим COALESCE, который заставляет его собирать фрагменты за вас).

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

Обычно я накапливаю текст в переменной и использую ее содержимое, когда вижу следующее событие StartElement или EndElement.В этот момент я также сбрасываю переменную накопленного текста в пустое значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top