Cómo agregar un espacio de nombres a un atributo en lxml

Estoy tratando de crear una entrada xml que se vea así usando python y lxml:

 

Estoy usando python y lxml. Tengo problemas con el atributo adlcp:scormtype . Soy nuevo en XML, así que corríjame 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 agrego un atributo a un elemento desde un espacio de nombres no predeterminado usando lxml? Me disculpo de antemano si esta es una pregunta trivial.

Esta no es una respuesta completa, pero solo unos pocos punteros.

adlcp no es el espacio de nombres, es un prefijo de espacio de nombres. El espacio de nombres 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, por ejemplo, {http://xxx/yy/zzz}scormtype lugar de solo scormtype. lxml colocará un prefijo de espacio de nombres automáticamente. Sin embargo, lxml establecerá el prefijo en ns0 o similar a menos que hagas más trampas, pero eso debería ser suficiente, ya que el prefijo no significa nada. (Sin embargo, algunas personas prefieren controlar el nombre del prefijo; consulte el argumento nsmap en las funciones Element y SubElement, y la función register_namespace).

Me gustaría ver el tutorial lxml sobre espacio de nombres y también Dive into Python – capítulo XML

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))