Работа с XML из Python

Введение

Примеры

  • 4

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

    Изменение файла 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') 
  • 1

    Создание и сборка 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 
  • 0

    Открытие и чтение больших файлов 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 ... 
  • 0

    Поиск в 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 

Синтаксис

Параметры

Примечания