2009-07-17 4 views
0

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

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

эмигранта определяет начальные и конечные теги, но преобразует & лт; до менее чем характер и та же для большего, чем характер и, таким образом, разбирает это следующим образом:

результат:

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

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

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

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

ответ

2

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

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

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

0

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

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

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