You are currently viewing Анализ XML с помощью DOM API на Python

Анализ XML с помощью DOM API на Python

Объектная модель документа (DOM) — это программный интерфейс для документов HTML и XML(Расширяемый язык разметки). Он определяет логическую структуру документов и способ доступа к документу и управления им.

Анализ XML с помощью API DOM в python довольно прост. Для примера мы создадим образец XML-документа (sample.xml) как показано ниже:

<?xml version="1.0"?>
<company>
	<name>GeeksForGeeks Company</name>
	<staff id="1">
		<name>Amar Pandey</name>
		<salary>8.5 LPA</salary>
	</staff>
	<staff id="2">
		<name>Akbhar Khan</name>
		<salary>6.5 LPA</salary>
	</staff>
	<staff id="3">
		<name>Anthony Walter</name>
		<salary>3.2 LPA</salary>
	</staff>
</company>

Теперь давайте проанализируем приведенный выше XML с помощью python. Приведенный ниже код демонстрирует процесс:

from xml.dom import minidom

doc = minidom.parse("sample.xml")

# doc.getElementsByTagName returns the NodeList
name = doc.getElementsByTagName("name")[0]
print(name.firstChild.data)

staffs = doc.getElementsByTagName("staff")
for staff in staffs:
		staff_id = staff.getAttribute("id")
		name = staff.getElementsByTagName("name")[0]
		salary = staff.getElementsByTagName("salary")[0]
		print("id:% s, name:% s, salary:% s" %
			(staff_id, name.firstChild.data, salary.firstChild.data))

Выход:

GeeksForGeeks Company
id:1, name: Amar Pandey, salary:8.5 LPA
id:2, name: Akbar Khan, salary:6.5 LPA
id:3, name: Anthony Walter, salary:3.2 LPA

То же самое можно сделать с помощью пользовательской функции, как показано в приведенном ниже коде:

from xml.dom import minidom

doc = minidom.parse("sample.xml")

# user-defined function
def getNodeText(node):

	nodelist = node.childNodes
	result = []
	for node in nodelist:
		if node.nodeType == node.TEXT_NODE:
			result.append(node.data)
	return ''.join(result)

name = doc.getElementsByTagName("name")[0]
print("Company Name : % s \n" % getNodeText(name))


staffs = doc.getElementsByTagName("staff")
for staff in staffs:
		staff_id = staff.getAttribute("id")
		name = staff.getElementsByTagName("name")[0]
		salary = staff.getElementsByTagName("salary")[0]
		print("id:% s, name:% s, salary:% s" %
			(staff_id, getNodeText(name), getNodeText(salary)))

Выход:

Company Name : GeeksForGeeks Company 

id:1, name:Amar Pandey, salary:8.5 LPA
id:2, name:Akbhar Khan, salary:6.5 LPA
id:3, name:Anthony Walter, salary:3.2 LPA