Учебное пособие по синтаксическому анализатору Python XML: чтение примера файла XML (Minidom, ElementTree)

Содержание:

Anonim

Что такое XML?

XML означает расширяемый язык разметки. Он был разработан для хранения и передачи небольших и средних объемов данных и широко используется для обмена структурированной информацией.

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

В этом уроке мы узнаем:

  • Как разбирать XML с помощью minidom
  • Как создать узел XML
  • Как анализировать XML с помощью ElementTree

Как разбирать XML с помощью minidom

Мы создали образец XML-файла, который собираемся проанализировать.

Шаг 1) Внутри файла мы можем увидеть имя, фамилию, дом и область знаний (SQL, Python, тестирование и бизнес).

Шаг 2) Как только мы проанализируем документ, мы распечатаем «имя узла» корня документа и « тэг firstchild» . Имя тега и имя узла - стандартные свойства файла XML.

  • Импортируйте модуль xml.dom.minidom и объявите файл, который необходимо проанализировать (myxml.xml)
  • Этот файл содержит основную информацию о сотруднике, такую ​​как имя, фамилия, дом, опыт и т. Д.
  • Мы используем функцию синтаксического анализа на минидоме XML для загрузки и анализа файла XML.
  • У нас есть переменная doc и doc получает результат функции синтаксического анализа
  • Мы хотим вывести имя узла и дочерний тег из файла, поэтому мы объявляем его в функции печати.
  • Запустите код - он распечатывает имя узла (#document) из XML-файла и первый дочерний тэг (сотрудник) из XML-файла.

Примечание :

Nodename и дочерний тэг - стандартные имена или свойства XML-файла. В случае, если вы не знакомы с этим типом соглашений об именах.

Шаг 3) Мы также можем вызвать список тегов XML из документа XML и распечатать. Здесь мы распечатали набор навыков, таких как SQL, Python, тестирование и бизнес.

  • Объявите переменную экспертизу, из которой мы собираемся извлечь всю экспертизу, которую имеет сотрудник.
  • Используйте стандартную функцию dom под названием "getElementsByTagName"
  • Это позволит получить все элементы с именем "умение".
  • Объявите цикл по каждому из тегов навыков
  • Запустите код - он даст список из четырех навыков

Как создать узел XML

Мы можем создать новый атрибут, используя функцию createElement, а затем добавить этот новый атрибут или тег к существующим тегам XML. Мы добавили новый тег BigData в наш XML-файл.

  1. Вам нужно написать код, чтобы добавить новый атрибут (BigData) к существующему тегу XML.
  2. Затем вам нужно распечатать тег XML с новыми атрибутами, добавленными к существующему тегу XML.
  • Чтобы добавить новый XML и добавить его в документ, мы используем код «doc.create elements»
  • Этот код создаст новый тег навыка для нашего нового атрибута «Большие данные».
  • Добавьте этот тег навыка в документ первый ребенок (сотрудник)
  • Запустите код - новый тег «большие данные» появится вместе с другим списком экспертизы.

Пример синтаксического анализатора XML

Пример Python 2

импорт xml.dom.minidomdef main ():# использовать функцию parse () для загрузки и анализа XML-файлаdoc = xml.dom.minidom.parse ("Myxml.xml");# распечатать узел документа и имя первого дочернего тегараспечатать doc.nodeNameраспечатать doc.firstChild.tagName# получить список тегов XML из документа и распечатать каждый из нихэкспертиза = doc.getElementsByTagName («экспертиза»)напечатать "% d экспертиза:"% экспертиза.lengthза мастерство в экспертизе:print skill.getAttribute ("имя")# создать новый тег XML и добавить его в документnewexpertise = doc.createElement («опыт»)newexpertise.setAttribute ("имя", "BigData")doc.firstChild.appendChild (newexpertise)Распечатать " "экспертиза = doc.getElementsByTagName («экспертиза»)напечатать "% d экспертиза:"% экспертиза.lengthза мастерство в экспертизе:print skill.getAttribute ("имя")если name == "__main__":главный();

Пример Python 3

импорт xml.dom.minidomdef main ():# использовать функцию parse () для загрузки и анализа XML-файлаdoc = xml.dom.minidom.parse ("Myxml.xml");# распечатать узел документа и имя первого дочернего тегапечать (doc.nodeName)печать (doc.firstChild.tagName)# получить список тегов XML из документа и распечатать каждый из нихэкспертиза = doc.getElementsByTagName («экспертиза»)print ("% d экспертиза:"% экспертиза.length)за мастерство в экспертизе:print (skill.getAttribute ("имя"))# создать новый тег XML и добавить его в документnewexpertise = doc.createElement («опыт»)newexpertise.setAttribute ("имя", "BigData")doc.firstChild.appendChild (newexpertise)Распечатать (" ")экспертиза = doc.getElementsByTagName («экспертиза»)print ("% d экспертиза:"% экспертиза.length)за мастерство в экспертизе:print (skill.getAttribute ("имя"))если __name__ == "__main__":главный();

Как анализировать XML с помощью ElementTree

ElementTree - это API для управления XML. ElementTree - это простой способ обработки файлов XML.

Мы используем следующий XML-документ в качестве образца данных:

SQLPython

Чтение XML с помощью ElementTree:

мы должны сначала импортировать модуль xml.etree.ElementTree.

import xml.etree.ElementTree as ET

Теперь возьмем корневой элемент:

root = tree.getroot()

Ниже приведен полный код для чтения выше данных xml.

import xml.etree.ElementTree as ETtree = ET.parse('items.xml')root = tree.getroot()# all items dataprint('Expertise Data:')for elem in root:for subelem in elem:print(subelem.text)
выход:
Expertise Data:SQLPython

Резюме:

Python позволяет анализировать весь XML-документ за один раз, а не только по одной строке за раз. Для синтаксического анализа XML-документа вам необходимо, чтобы весь документ был в памяти.

  • Чтобы проанализировать XML-документ
    • Импортировать xml.dom.minidom
    • Используйте функцию parse для анализа документа (doc = xml.dom.minidom.parse (имя файла);
    • Вызов списка тегов XML из документа XML с помощью кода (= doc.getElementsByTagName ("имя тегов xml")
  • Для создания и добавления нового атрибута в XML-документ
    • Используйте функцию createElement