Введение

Примеры

Открытие и чтение с помощью ElementTree

Импортируйте объект ElementTree, откройте соответствующий XML-файл и получите корневой тег:

 import xml.etree.ElementTree as ET
tree = ET.parse("yourXMLfile.xml")
root = tree.getroot()

 

Есть несколько способов поиска по дереву. Сначала по итерации:

 for child in root:
    print(child.tag, child.attrib)

 

В противном случае вы можете ссылаться на определенные места, такие как список:

 print(root[0][1].text)

 

Для поиска конкретных тегов по имени, используйте .find или .findall :

 print(root.findall("myTag"))
print(root[0].find("myOtherTag")) 

Изменение файла XML

Модуль Import Element Tree и откройте файл XML, получите элемент XML

 import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root=tree.getroot()
element = root[0] #get first child of root element

 

Элементом элемента можно управлять, изменяя его поля, добавляя и изменяя атрибуты, добавляя и удаляя дочерние элементы

 element.set('attribute_name', 'attribute_value') #set the attribute to xml element
element.text="string_text"
 

Если вы хотите удалить элемент, используйте метод Element.remove ()

 root.remove(element)
 

Метод ElementTree.write (), используемый для вывода объекта XML в файлы XML.

 tree.write('output.xml') 

Создание и сборка XML-документов

Модуль Импортировать дерево элементов

 import xml.etree.ElementTree as ET
 

Функция Element () используется для создания элементов XML

 p=ET.Element('parent')

 

Функция SubElement (), используемая для создания вложенных элементов в элементе give

 c = ET.SubElement(p, 'child1')
 

Функция dump () используется для вывода элементов xml.

 ET.dump(p)
# Output will be like this
#<parent><child1 /></parent>

 

Если вы хотите сохранить в файл, создайте дерево XML с функцией ElementTree () и сохраните в файл, используя метод write ()

 tree = ET.ElementTree(p)
tree.write("output.xml")

 

Функция Comment () используется для вставки комментариев в XML-файл.

 comment = ET.Comment('user comment')
p.append(comment) #this comment will be appended to parent element 

Открытие и чтение больших файлов XML с помощью iterparse (инкрементальный анализ)

Иногда мы не хотим загружать весь XML-файл, чтобы получить необходимую нам информацию. В этих случаях полезно постепенно загружать соответствующие разделы и затем удалять их, когда мы закончим. С помощью функции iterparse вы можете редактировать дерево элементов, которое хранится при разборе XML.

Импортируйте объект ElementTree:

 import xml.etree.ElementTree as ET

 

Откройте файл .xml и переберите все элементы:

 for event, elem in ET.iterparse("yourXMLfile.xml"):
    ... do something ...

 

Кроме того, мы можем искать только определенные события, такие как начальный / конечный теги или пространства имен. Если эта опция не указана (как указано выше), возвращаются только события «end»:

 events=("start", "end", "start-ns", "end-ns")
for event, elem in ET.iterparse("yourXMLfile.xml", events=events):
    ... do something ...

 

Вот полный пример, показывающий, как очистить элементы из дерева в памяти, когда мы закончим с ними:

 for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")):        
    if elem.tag == "record_tag" and event == "end":
        print elem.text
        elem.clear()
    ... do something else ... 

Поиск в XML с помощью XPath

Начиная с версии 2.7 ElementTree имеет лучшую поддержку XPath запросов. XPath - это синтаксис, позволяющий вам перемещаться по XML, как SQL используется для поиска в базе данных. Как find и findall функции поддержки XPath. Xml ниже будет использоваться для этого примера

  <Catalog>
    <Books>
        <Book id="1" price="7.95">
            <Title>Do Androids Dream of Electric Sheep?</Title>
            <Author>Philip K. Dick</Author>
        </Book>
        <Book id="5" price="5.95">
            <Title>The Colour of Magic</Title>
            <Author>Terry Pratchett</Author>
        </Book>
        <Book id="7" price="6.95">
            <Title>The Eye of The World</Title>
            <Author>Robert Jordan</Author>
        </Book>
    </Books>
</Catalog>

 

Поиск всех книг:

 import xml.etree.cElementTree as ET
tree = ET.parse('sample.xml')
tree.findall('Books/Book')

 

Поиск книги с названием «Цвет магии»:

 tree.find("Books/Book[Title='The Colour of Magic']") 
# always use '' in the right side of the comparison

 

Поиск книги с id = 5:

 tree.find("Books/Book[@id='5']")
# searches with xml attributes must have '@' before the name

 

Поиск второй книги:

 tree.find("Books/Book[2]")
# indexes starts at 1, not 0

 

Поиск последней книги:

 tree.find("Books/Book[last()]")
# 'last' is the only xpath function allowed in ElementTree

 

Поиск всех авторов:

 tree.findall(".//Author")
#searches with // must use a relative path 

Синтаксис

Параметры

Примечания