Python считать xml файл

Работа с XML из Python

Работа с XML из Python

Не все элементы входных данных XML будут в конечном итоге являться элементами анализируемого дерева. В настоящий момент этот модуль пропускает все комментарии XML, инструкции по обработке и объявления типа документа во входных данных. Тем не менее, деревья, построенные с использованием API этого модуля, а не синтаксического анализа из XML-текста, могут иметь комментарии и инструкции по обработке в них.

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

Импорт модуля Элемента Дерева

import xml.etree.ElementTree as ET 

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

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

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

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

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

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

comment = ET.Comment('user comment') p.append(comment) #этот комментарий будет добавлен к родительскому элементу ET.dump(p) #  

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

Импортируйте модуль ElementTree и откройте файл XML, получите элемент XML

import xml.etree.ElementTree as ET tree = ET.parse('sample.xml') root=tree.getroot() element = root[0] #получите первого ребенка родительского корня element #

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

element.set('attribute_name', 'attribute_value') #установите артрибут xml элементу element.text="string_text"

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

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

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

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

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

 import xml.etree.ElementTree as ET 

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

for event, elem in ET.iterparse("yourXMLfile.xml"): # . сделайте что-нибудь . 

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

events=("start", "end", "start-ns", "end-ns") for event, elem in ET.iterparse("yourXMLfile.xml", events=events): # . сделайте что-нибудь . 

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

for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")): if elem.tag == "record_tag" and event == "end": print elem.text elem.clear() # . сделайтe что-нибудь другое . 

Открытие и чтение с помощью 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)

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

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

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

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

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

   Мечтают ли андроиды об электроовцах? Philip K. Dick  The Colour of Magic Terry Pratchett  The Eye of The World Robert Jordan    
import xml.etree.cElementTree as ET tree = ET.parse('sample.xml') tree.findall('Books/Book') 

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

tree.find("Books/Book[Title='The Colour of Magic']") # всегда используйте '' в правой стороне сравнения
tree.find("Books/Book[@id='5']") # поиск с xml атрибутами должен иметь '@' перед именем 
tree.find("Books/Book[2]") # индексы начинаются с 1, не с 0
tree.find("Books/Book[last()]") # 'last' единственная xpath функция позволенная в ElementTree
tree.findall(".//Author") # поиск с // должен использовать родственный путь

Источник

Читайте также:  Pragma no cache php
Оцените статью