<weather>
<city name="Москва">
<temperature unit="Celsius">-5</temperature>
<condition>Ясно</condition>
</city>
</weather>
import xml.etree.ElementTree as ET
xml_data = """<library>
<book><title>Book 1</title></book>
<book><title>Book 2</title></book>
</library>"""
root = ET.fromstring(xml_data)
for book in root.findall('book'):
print(book.find('title').text)
# Вывод: Book 1, Book 2
import xml.sax
class LogHandler(xml.sax.ContentHandler):
def startElement(self, name, attrs):
if name == "log": # Если найден элемент <log>, выводим его атрибуты
print("Найден лог-файл:", attrs["id"])
def characters(self, content):
if content.strip():
print("Сообщение лога:", content.strip()) # Выводим текст внутри элемента
xml_data = """<logs>
<log id="101">Ошибка соединения</log>
<log id="102">Успешный вход в систему</log>
</logs>"""
parser = xml.sax.make_parser()
parser.setContentHandler(LogHandler())
parser.parseString(xml_data) # Парсим XML как поток
from lxml import etree
xml_data = """<orders>
<order><id>1</id><value>100</value></order>
<order><id>2</id><value>200</value></order>
</orders>"""
for event, element in etree.iterparse(xml_data): # Читаем элементы по одному
if element.tag == "order": # Только <order>
print(f"Найден заказ: {element.find('id').text}")
from xml.dom.minidom import parseString
xml_data = """<books>
<book><title>Book A</title></book>
<book><title>Book B</title></book>
</books>"""
dom = parseString(xml_data) # Строим DOM-модель
for book in dom.getElementsByTagName("book"):
print(book.getElementsByTagName("title")[0].firstChild.nodeValue)
from lxml import etree
xml_data = """<catalog>
<product>
<name>Ноутбук</name>
<price>1200</price>
<category>Электроника</category>
</product>
<product>
<name>Смартфон</name>
<price>700</price>
<category>Электроника</category>
</product>
<product>
<name>Офисный стул</name>
<price>150</price>
<category>Мебель</category>
</product>
</catalog>"""
root = etree.fromstring(xml_data) # Загружаем XML-дерево
products = root.xpath('//product') # Находим все <product> с помощью XPath
for product in products:
name = product.find('name').text # Забираем название
price = product.find('price').text # И цену
category = product.find('category').text # И категорию
print(f"Товар: {name}, Цена: {price}, Категория: {category}")
Товар: Ноутбук, Цена: 1200, Категория: Электроника
Товар: Смартфон, Цена: 700, Категория: Электроника
Товар: Офисный стул, Цена: 150, Категория: Мебель
from bs4 import BeautifulSoup
xml_data = """<bookstore>
<book id="1" available="true">
<title>Python для профессионалов</title>
<author>Джон Смит</author>
<price>1250</price>
<category>Программирование</category>
</book>
<book id="2" available="false">
<title>Искусственный интеллект</title>
<author>Анна Джонсон</author>
<price>950</price>
<category>Наука</category>
</book>
<book id="3" available="true">
<title>Большие данные</title>
<author>Майкл Браун</author>
<price>1100</price>
<category>Программирование</category>
</book>
</bookstore>"""
# Обратите внимание на параметр 'xml' - он указывает BeautifulSoup
# использовать lxml в качестве XML-парсера
soup = BeautifulSoup(xml_data, 'xml')
# Найдем все книги в магазине
books = soup.find_all('book')
for book in books:
title = book.title.text
author = book.author.text
price = book.price.text
category = book.category.text
available = "В наличии" if book['available'] == "true" else "Нет в наличии"
print(f"Книга: {title}")
print(f"Автор: {author}")
print(f"Цена: {price} руб.")
print(f"Категория: {category}")
print(f"Статус: {available}")
print("-" * 40)
Книга: Python для профессионалов
Автор: Джон Смит
Цена: 1250 руб.
Категория: Программирование
Статус: В наличии
Книга: Искусственный интеллект
Автор: Анна Джонсон
Цена: 950 руб.
Категория: Наука
Статус: Нет в наличии
Книга: Большие данные
Автор: Майкл Браун
Цена: 1100 руб.
Категория: Программирование
Статус: В наличии