Я пытаюсь разобрать файл xml и расположить его в таблице, разделив содержимое как isElement, isAttribute, Value, Text.
Как мне использовать модуль ElementTree для достижения этой цели? Я знаю, что это возможно с помощью модуля minidom.
Причина, по которой я хочу использовать ElementTree, связана с эффективностью. Пример того, чего я пытаюсь достичь, доступен здесь: http://python.zirael.org/e-gtk-treeview4.html
Любые советы о том, как разделить содержимое xml на элемент, подэлемент и т. д. с помощью модуля ElementTree?
Это то, что у меня есть до сих пор:
import xml.etree.cElementTree as ET
filetree = ET.ElementTree(file = "some_file.xml")
for child in filetree.iter():
print child.tag, child.text, child.attrib
Для следующего примера XML-файла:
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
Я получаю это как вывод:
data
{}
country
{'name': 'Liechtenstein'}
rank 1 {}
year 2008 {}
gdppc 141100 {}
neighbor None {'direction': 'E', 'name': 'Austria'}
neighbor None {'direction': 'W', 'name': 'Switzerland'}
country
{'name': 'Singapore'}
rank 4 {}
year 2011 {}
gdppc 59900 {}
neighbor None {'direction': 'N', 'name': 'Malaysia'}
country
{'name': 'Panama'}
rank 68 {}
year 2011 {}
gdppc 13600 {}
neighbor None {'direction': 'W', 'name': 'Costa Rica'}
neighbor None {'direction': 'E', 'name': 'Colombia'}
Я нашел что-то подобное в другом посте, но он использует модуль DOM. Пройтись по всем узлам XML в структуре с вложенными элементами< /а>
Основываясь на полученном комментарии, я хочу добиться этого:
data (type Element)
country(Element)
Text = None
name(Attribute)
value: Liechtenstein
rank(Element)
Text = 1
year(Element)
Text = 2008
gdppc(Element)
Text = 141100
neighbour(Element)
name(Attribute)
value: Austria
direction(Attribute)
value: E
neighbour(Element)
name(Attribute)
value: Switzerland
direction(Attribute)
value: W
country(Element)
Text = None
name(Attribute)
value: Singapore
rank(Element)
Text = 4
Я хочу иметь возможность представлять свои данные в виде дерева, как указано выше. Для этого мне нужно следить за их отношениями. Надеюсь, это проясняет вопрос.
TreeStore
. Есть разница в том, какElementTree
обрабатывает текст: это не особый тип узла, но каждый элемент имеет атрибутыtext
иtail
. - person BlackJack   schedule 02.09.2015ElementTree
?Element
объекты представляют собой последовательности, содержащие их непосредственные дочерние элементы, атрибуты XML хранятся в словаре, сопоставляющем имена атрибутов со значениями. Словарь — это атрибут с именемattrib
дляElement
объектов. И последовательности, и словари поддерживают функциюlen()
для определения количества элементов. - person BlackJack   schedule 03.09.2015