You are currently viewing Как анализировать и изменять XML в Python?

Как анализировать и изменять XML в Python?

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

Примечание: Для получения дополнительной информации обратитесь к XML | Основы

Здесь мы считаем, что XML-файл присутствует в памяти. Пожалуйста, прочитайте комментарии в коде для ясного понимания.

XML-файл:

Давайте сохраним приведенный выше XML-файл как “test.xml”. Прежде чем идти дальше, вы должны знать, что в XML у нас нет предопределенных тегов, как в HTML. При написании XML автор должен определить свои собственные теги, а также структуру документа. Теперь нам нужно проанализировать этот файл и изменить его с помощью Python. Для выполнения вышеуказанной задачи мы будем использовать библиотеку “minidom” Python 3. Этот модуль не встроен в Python. Чтобы установить это, введите приведенную ниже команду в терминале.

pip install minidom

Чтение XML

Сначала мы прочитаем содержимое XML-файла, а затем узнаем, как изменить XML-файл.

Пример

import xml.dom.minidom as md

def main():

	# parsing the xml file and
	# storing the contents in
	# "file" object Put in the
	# path of your XML file in
	# the parameter for parse() method.
	file = md.parse( "test.xml" )

	# nodeName returns the type of
	# the file(in our case it returns
	# document)
	print( file.nodeName )

	# firstChild.tagName returns the
	# name of the first tag.Here it
	# is "note"
	print( file.firstChild.tagName )

	firstname = file.getElementsByTagName( "fname" )

	# printing the first name
	print( "Name: " + firstname[ 0 ].firstChild.nodeValue )

	lastname = file.getElementsByTagName( "lname" )

	# printing the last name
	print( "Surname: " + lastname[ 0 ].firstChild.nodeValue )

	favgame = file.getElementsByTagName( "favgame" )

	# printing the favourite game
	print( "Favourite Game: " + favgame[ 0 ].firstChild.nodeValue )

	# Printing tag values having
	# attributes(Here tag "player"
	# has "name" attribute)
	players = file.getElementsByTagName( "player" )

	for player in players:
		print( player.getAttribute( "name" ) )

if __name__=="__main__":
	main();

Выход:

#document
note
Name: Jack
Surname: Shelby
Favourite Game: Football
Messi
Ronaldo
Mbappe

В приведенном выше коде Python при печати First Name или Last Name мы использовали firstname[0] / lastname[0]. Это происходит потому, что существует только 1 fname и только 1 lname. Для несколько одинаковых тегов мы можем действовать, как показано ниже.

XML:

Python

import xml.dom.minidom as md

def main():

	file = md.parse( "test.xml" )
	names = file.getElementsByTagName( "fname" )

	for name in names:

		print( name.firstChild.nodeValue )

if __name__=="__main__":
	main();

Выход:

Jack
John
Harry

Изменение XML

Теперь у нас есть основная идея о том, как мы можем анализировать и читать содержимое XML-файла с помощью Python. Теперь давайте научимся модифицировать XML-файл.

XML-файл:

Давайте добавим следующее :

  • Height
  • Языки, известные Jack

Позволь нам Удалить“хобби”. Также позвольте нам модифицировать возраст Для 29.
Код на Python:(Изменение XML)

import xml.dom.minidom as md

def main():

	file = md.parse("test.xml")
	
	height = file.createElement( "height" )

	# setting height value to 180cm
	height.setAttribute("val", "180 cm")

	# adding height tag to the "file"
	# object
	file.firstChild.appendChild(height)

	lan = [ "English", "Spanish", "French" ]

	# creating separate "lang" tags for
	# each language and adding it to
	# "file" object
	for l in lan:
		
		lang = file.createElement( "lang" )
		lang.setAttribute( "lng", l )
		file.firstChild.appendChild( lang )

	delete = file.getElementsByTagName( "hobby" )

	# deleting all occurences of a particular
	# tag(here "hobby")
	for i in delete:

		x = i.parentNode
		x.removeChild( i )

	# modifying the value of a tag(here "age")
	file.getElementsByTagName( "age" )[ 0 ].childNodes[ 0 ].nodeValue = "29"

	# writing the changes in "file" object to
	# the "test.xml" file
	with open( "test.xml", "w" ) as fs:

		fs.write( file.toxml() )
		fs.close()

if __name__=="__main__":
	main();

Выход:

Последние 3 строки кода Python просто преобразуют объект “файл” в XML с помощью метода toxml() и записывают его в “test.xml” файл. Если вы не хотите редактировать исходный файл и просто хотите распечатать измененный XML, замените эти 3 строки на:

print(file.toxml())