2009-09-03 14 views
9

Estoy intentando crear una entrada XML que tiene este aspecto utilizando Python y lxml:Cómo agregar un espacio de nombres para un atributo en lxml

<resource href="Unit 4.html" adlcp:scormtype="sco"> 

estoy usando Python y lxml. Tengo problemas con el atributo adlcp:scormtype. Soy nuevo en xml así que por favor corrígeme si me equivoco. adlcp es un espacio de nombres y scormtype es un atributo que se define en el espacio de nombres adlcp, ¿verdad?
Ni siquiera estoy seguro de si esta es la pregunta correcta, pero ... Mi pregunta es, ¿cómo puedo agregar un atributo a un elemento de un espacio de nombres no predeterminado utilizando lxml? Me disculpo de antemano si esta es una pregunta trivial.

Respuesta

15

Esta no es una respuesta completa, sino solo algunas sugerencias.

adlcp no es el espacio de nombres es un prefijo de espacio de nombres. El espacio de nombre se define en el documento mediante un atributo como xmlns:adlcp="http://xxx/yy/zzz"

En lxml, siempre establece un nombre de elemento/atributo, incluido el espacio de nombres, p. {http://xxx/yy/zzz}scormtype en lugar de simplemente scormtype. lxml colocará un prefijo de espacio de nombres automáticamente. Sin embargo, lxml configurará el prefijo en ns0 o similar a menos que haga más violín pero eso debería ser suficiente ya que el prefijo no significa nada. (Sin embargo, algunas personas prefieren controlar el nombre del prefijo, ver el argumento nsmap en las funciones Elemento y SubElemento, y la función register_namespace).

me gustaría ver en el lxml tutorial on namespace y también Dive into Python - XML chapter

+0

Sumérgete en enlace de pitón es muertos (410) Gone –

+0

@JonasWielicki - Actualizado con nuevo enlace – Mark

4

Prueba esto:

builder = ElementMaker(namespace="http://a.different.url/blah/v.10", 
         nsmap={ 
         'adlcp': "http://a.namespace.url/blah/v.10", 
         'anotherns': "http://a.different.url/blah/v.10" 
         }) 

builder.resource() 
builder.attrib['href'] = "Unit 4.html" 
builder.attrib['{http://a.namespace.url/blah/v.10}scormtype'] = 'sco' 

print(etree.tostring(builder, pretty_print=True)) 
Cuestiones relacionadas