小编Rya*_*ish的帖子

使用lxml基于属性值对子元素进行排序

我正在尝试根据属性值对文档中的一些子元素进行排序,而实际排序的函数似乎正在工作,新的排序元素的拼接似乎不是.

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', …

python xml sorting lxml

4
推荐指数
1
解决办法
2811
查看次数

标签 统计

lxml ×1

python ×1

sorting ×1

xml ×1