Есть ли возможность игнорировать неопределенные префиксы пространства имен в LXML? - PullRequest
8 голосов
/ 19 августа 2010

Я анализирую несовместимый файл XML ( формат Sphinx xmlpipe2) и хотел бы, чтобы анализатор LXML игнорировал тот факт, что существуют неразрешенные префиксы пространства имен.

Пример Sphinx XML:

<sphinx:schema>
    <sphinx:field name="subject"/>
    <sphinx:field name="content"/>
    <sphinx:attr name="published" type="timestamp"/>
    <sphinx:attr name="author_id" type="int" bits="16" default="1"/>
</sphinx:schema>

Мне известно о передаче опции ключевого слова парсера, чтобы попытаться восстановить поврежденный XML, например,

parser = etree.XMLParser(recover=True)
tree = etree.parse('sphinxTest.xml', parser)

но вышеупомянутый префикс не игнорирует, он удаляет его.

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

parser = etree.XMLParser(target = AddPrefix())

где AddPrefix() - это класс, который добавляет префикс к каждому тегу атрибута. Есть ли более простой способ сделать это? В конце концов я хочу программно написать формат xmlpipe2 Сфинкса.

1 Ответ

3 голосов
/ 22 октября 2011

Добавить xmlns:sphinx="bogus" к корневому элементу.

...