2010-08-19 19 views
7

Estoy analizando un archivo XML no compatible (formato Sphinx's xmlpipe2) y me gustaría que el analizador LXML ignore el hecho de que hay prefijos de espacio de nombres no resueltos.¿Hay un interruptor para ignorar los prefijos de espacio de nombres indefinidos en LXML?

Un ejemplo de la Esfinge 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> 

Soy consciente de que pasa una opción de palabra clave analizador para intentar recuperar XML dañado, por ejemplo,

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

pero lo anterior no ignora el prefijo, lo elimina.

Podría crear un objetivo que agregue el prefijo eliminado, p.

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

donde AddPrefix() es una clase que añade el prefijo a cada etiqueta de atributo. ¿Hay una manera más simple de hacer esto? Eventualmente quiero escribir programáticamente el formato xmlpipe2 de Sphinx limpiamente.

Respuesta

1

Agregue xmlns:sphinx="bogus" al elemento raíz.

Cuestiones relacionadas