Python 根据特定标记对XML进行排序

Python 根据特定标记对XML进行排序,python,xml,Python,Xml,我有一个非常大的文件,其中包含很多XML标记。为了方便起见,让我们以主人和宠物为例 <?xml version="1.0" encoding="UTF-8"?> <PetOwnertag> <owner>Bob</owner> <pet>Fluffers</pet> </PetOwnertag> <PetOwnertag> <owner>Jim</owner>

我有一个非常大的文件,其中包含很多XML标记。为了方便起见,让我们以主人和宠物为例

 <?xml version="1.0" encoding="UTF-8"?>
<PetOwnertag>
  <owner>Bob</owner>
  <pet>Fluffers</pet>
</PetOwnertag>
<PetOwnertag>
  <owner>Jim</owner>
  <pet>Mr.Whiskers</pet>
</PetOwnertag>

上下快速移动
绒毛
吉姆
胡须先生
我想做的事情是能够在XML文件中加载脚本,并根据所有者的名称对文件内容进行排序,这样每个以“B”开头的所有者都将进入File1.XML,其他所有人都将进入File2.XML

我如何才能让这成为最简单的方法呢?我更喜欢用python来完成这项工作。

因此,您可以使用加载XML文件。 u将所有者及其EtreeElement存储在dict中(如hashmap)。 U按所有者对dict排序,然后从dict中获取元素并写入输出文件

示例(未测试)


您可以使用lxml库,并将它们存储在词典中的EtreeElements中

from lxml import parse
from lxml import etree
from io import StringIO

tree = etree.parse(StringIO("your file name"))
data_dict = dict()
for child in tree:
   # Element.tag return the PetOwnerTag. So u must go into, search the element by tag owner and get his value
   # data_dict[child.tag] = child
   owner = child.find("owner")
   if owner:
       data_dict[owner.text] = child

for owner in sorted(data_dict.iterkeys()):
    # here can u write your data to files
    print owner, etree.tostring (dict[owner])