3

我一直在尝试使用 lxml 包的“objectify”来解析我的 XML,但遇到了一个问题。如果我有一个无价值的标签,我似乎无法找到获取其属性的方法。

例如:

import lxml.objectify

xml_obj = lxml.objectify.fromstring("""
<A>
    <B foo="baz"/>
    <B foo="bar"/>
</A>""")
print xml_obj.getchildren()

A = None [ObjectifiedElement]
    B = u'' [StringElement]
      * baz = 'boo'
    B = u'' [StringElement]
      * foo = 'bar'

可以看到,两个B标签都变成了StringElement,但是在dump对象的时候看到,应该还是有办法取回属性的!

4

1 回答 1

2
import lxml.objectify as objectify
import lxml.etree as ET

content = """
<A>
    <B foo="baz"/>
    <B foo="bar"/>
</A>"""
xml_obj = objectify.fromstring(content)
print(xml_obj.getchildren())
# [u'', u'']

您可以使用以下方法访问元素的属性elt.attrib

for child in xml_obj.getchildren():
    print(child.attrib)
# {'foo': 'baz'}
# {'foo': 'bar'}

您也可以修改这些属性:

xml_obj.B.attrib['baz'] = 'boo'
xml_obj.B[1].attrib['foo'] = 'blah'

序列化xml_obj显示ET.tostring结果:

print(ET.tostring(xml_obj, pretty_print=True))
# <A>
#   <B foo="baz" baz="boo"/>
#   <B foo="blah"/>
# </A>
于 2013-12-28T10:49:01.927 回答