我正在尝试根据属性值对文档中的一些子元素进行排序,而实际排序的函数似乎正在工作,新的排序元素的拼接似乎不是.
from lxml import etree
def getkey(elem):
# Used for sorting elements by @LIN.
# returns a tuple of ints from the exploded @LIN value
# '1.0' -> (1,0)
# '1.0.1' -> (1,0,1)
return tuple([int(x) for x in elem.get('LIN').split('.')])
xml_str = """<Interface>
<Header></Header>
<PurchaseOrder>
<LineItems>
<Line LIN="2.0"></Line>
<Line LIN="3.0"></Line>
<Line LIN="1.0"></Line>
</LineItems>
</PurchaseOrder>
</Interface>"""
root = etree.fromstring(xml_str)
lines = root.findall("PurchaseOrder/LineItems/Line")
lines[:] = sorted(lines, key=getkey)
res_lines = [x.get('LIN') for x in lines]
print res_lines
print etree.tostring(root, pretty_print=True)
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我会看到lines列表在打印时排序正确['1.0', …