В этой статье мы обсудим, как анализировать XML на языке программирования Python. Мы рассмотрим несколько примеров, чтобы понять механизм синтаксического анализа XML в Python.
Что такое XML?
XML означает расширяемый язык разметки. XML очень похож на HTML. XML используется для хранения и передачи данных, а HTML используется только для отображения данных в браузере. XML позволяет пользователю хранить и передавать данные организованным образом.
Пример XML-файла
Пользователь может определять свои собственные теги в XML-файле. В следующем примере мы используем определяемый пользователем тег, например — . Для каждого тега нам также понадобится закрывающий тег — . Пользователь может определить столько пользовательских тегов, сколько ему нужно. Вот пример XML-файла:
<?xml version=«1.0» encoding=«UTF-8» standalone=«no» ?>
<StudentsData FormatVersion=«1»>
<Students>
<Student Name=«David» Type=«Part-Time»></Student><Student Name=«Emma» Type=«Full-Time»></Student>
<Student Name=«Noah» Type=«Part-Time»></Student>
<Student Name=«Olivia» Type=«Full-Time»></Student>
<Student Name=«Leo» Type=«Full-Time»></Student>
<Student Name=«George» Type=«Full-Time»></Student>
</Students>
</StudentsData>
Разбор библиотек в Python
Существуют библиотеки для анализа XML-данных в большинстве современных языков программирования высокого уровня. Есть несколько библиотек для разбора файлов XML в python:
- Minidom
- ElementTree
Однако в этой статье мы сосредоточимся на библиотеке minidom для анализа XML-данных. Minidom — это минимальная реализация интерфейса объектной модели документа. Он очень легкий и проще, чем полная модель DOM.
Пример 1
В этом примере мы сначала импортируем модуль «xml.dom.minidom». Здесь будет проанализирован XML-файл — sample.XML. В файле xml хранится основная информация о студентах — имя студента и название раздела класса. Функция синтаксического анализа используется в xml minidom для загрузки и анализа файла xml. Переменная mydoc получает результат функции синтаксического анализа. Затем функция печати используется для отображения имени узла и имени тега первого дочернего элемента.
import xml.dom.minidom
def main():
# Load and parse XML file
mydoc = xml.dom.minidom.parse(«sample.xml»)# prints the nodename and the tagname of the firstchild.
print (mydoc.nodeName)
print (mydoc.firstChild.tagName)if __name__ == «__main__»:
main()
Пример 2
В этом примере мы увидим, как получить список тегов XML и распечатать их. Мы объявляем переменную «шпилька». Эта переменная содержит всех студентов из studentData. Цикл for получает все данные с именем тега «Name».
import xml.dom.minidom
def main():
# Load and parse XML file
mydoc = xml.dom.minidom.parse(«sample.xml»)# prints the nodename and the tagname of the firstchild.
print (mydoc.nodeName)
print (mydoc.firstChild.tagName)# get the XML tags
stud = mydoc.getElementsByTagName («Student»)
print («No of students : %d» % stud.length)for name in stud:
print (name.getAttribute(«Name»))if __name__ == «__main__»:
main()
Пример 3
Это еще один пример синтаксического анализа XML с использованием библиотеки minidom. В этом примере мы также увидим, как создать новый элемент xml. Во-первых, мы загрузим и проанализируем данный XML-файл, то есть файл «sample.xml». Новый элемент XML можно создать с помощью функции — createElement (). После создания элемента мы можем добавить его к существующим элементам xml с помощью функции appendChild ().
import xml.dom.minidom
def main():
# Load and parse XML file
myDoc = xml.dom.minidom.parse(«sample.xml»);# print document node and first child tag name
print (myDoc.nodeName)
print (myDoc.firstChild.tagName)# get the list of the XML tags
studName = myDoc.getElementsByTagName(«Student»)
print («%d studName:» % studName.length)
for sName in studName:
print (sName.getAttribute(«Name»))# Add new xml tags
newStudName = myDoc.createElement(«Student»)
newStudName.setAttribute(«Name», «Paul»)
myDoc.firstChild.appendChild(newStudName)
print (» «)# print all XML tags
studName = myDoc.getElementsByTagName(«Student»)
print («%d studName:» % studName.length)
for sName in studName:
print (sName.getAttribute(«Name»))if __name__ == «__main__»:
main()
Заключение
В этой статье кратко обсуждается формат файла XML и способы синтаксического анализа файлов XML в Python. В Python есть несколько библиотек для анализа файлов XML. Но в этой статье мы рассмотрели только библиотеку minidom и увидели несколько примеров для синтаксического анализа файлов xml и добавления новых элементов xml.