我一直在尝试使用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,但是当转储对象时,仍然应该有一种方法来检索属性!
答案 0 :(得分: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>