如何在lxm中向属性添加名称空间

2024-04-28 12:36:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python和lxml创建一个如下所示的xml条目:

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

我正在使用python和lxml。我对adlcp:scormtype属性有问题。我是xml新手,如果我错了,请纠正我。adlcp是一个名称空间,scormtype是在adlcp名称空间中定义的属性,对吗?
我甚至不确定这个问题是否正确,但是。。。我的问题是,如何使用lxml向来自非默认命名空间的元素添加属性?如果这是一个微不足道的问题,我会事先道歉。


Tags: 名称属性定义html空间unit条目xml
2条回答

这不是一个完整的答复,只是一些指针。

adlcp不是命名空间,而是命名空间前缀。命名空间在文档中由类似xmlns:adlcp="http://xxx/yy/zzz"的属性定义

在lxml中,您总是设置一个包含名称空间的元素/属性名,例如。 {http://xxx/yy/zzz}scormtype而不仅仅是scormtype。然后lxml将自动放入一个名称空间前缀。 不过,lxml会将前缀设置为ns0或类似的值,除非您做了更多的修改,但这应该足够了,因为前缀并不意味着什么。(但是有些人更喜欢控制前缀名;请参阅元素和子元素函数上的nsmap参数,以及register_namespace函数)。

我会看看lxml tutorial on namespaceDive into Python - XML chapter

试试这个:

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

相关问题 更多 >