XML-синтаксический анализ в Python для обработки данных - PullRequest
0 голосов
/ 17 июля 2009

Я пытаюсь проанализировать 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'

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

Ответы [ 2 ]

2 голосов
/ 17 июля 2009

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

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

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

0 голосов
/ 18 июля 2009

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

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

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

...