Сортировка XML-файла в алфавитном порядке по имени тега - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть несколько больших XML-файлов в следующем формате:

<item>
<name>Name 1</name>
<info>Details 1</info>
</item>

<item>
<name>Name 3</name>
<info>Details 3</info>
</item>

<item>
<name>Name 2</name>
<info>Details 2</info>
</item>

Со временем добавления к ним стало некрасиво.Я хотел бы отсортировать их в алфавитном порядке по имени тега.Я искал здесь и нашел несколько разных сценариев Python, но они не работают для меня.Вот один пример того, что я пробовал:

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")

container = tree.find("item")

data = []
for elem in container:
    key = elem.findtext("name")
    data.append((key, elem))

data.sort()

container[:] = [item[-1] for item in data]

tree.write("test-out.xml")
print "File Written"

Спасибо за любую помощь

1 Ответ

0 голосов
/ 26 ноября 2018

Вам действительно нужно иметь XQuery или XSLT в вашем наборе инструментов для такого рода работы.

В XQuery:

<items>{
  for $i in //item order by $i/name return $i
}</items>

В XSLT (1.0 или более поздней версии):

<items xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:for-each select="//item">
    <xsl:sort select="name"/>
    <xsl:copy-of select="."/>
  </xsl:for-each>
</items>
...