@albertalexandrov

Как распарсить этот XML?

Не получается прочитать вроде бы простой XML. Делаю так:

import xml.etree.ElementTree as ET

data = """
<ns2:Request xmlns:ns2="urn://www.example.com">
    <ns2:User>
        <ns2:Name>John</ns2:Name>
        <ns2:Surname>Snow</ns2:Surname>
        <ns2:Email>joihn.show@gmail.com</ns2:Email>
        <ns2:Birthday>2005-10-23T04:00:00+03:00</ns2:Birthday>
    </ns2:User>
</ns2:Request>
"""

namespaces = {"ns2": "urn://www.example.com"}

xml = ET.fromstring(data)

name = xml.find("ns2:Email", namespaces)  # возвращает None


Как мне прочитать поля Name, Surname, Email и Birthday?
  • Вопрос задан
  • 139 просмотров
Решения вопроса 2
Maksim_64
@Maksim_64
Data Analyst
С твоей библиотекой не работал, но с BeautifulSoup все работает как надо.
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'xml')
name = soup.find('ns2:Name').text
surname = soup.find('ns2:Surname').text
email = soup.find('ns2:Email').text
birthday = soup.find('ns2:Birthday').text
Ответ написан
@Mark0vka
Чтобы прочитать поля Name, Surname, Email и Birthday из XML с использованием библиотеки xml, вам нужно указать полные пути к этим элементам с учетом пространства имен. Вот как это можно сделать:

import xml.etree.ElementTree as ET

data = """
<ns2:Request xmlns:ns2="urn://www.example.com">
    <ns2:User>
        <ns2:Name>John</ns2:Name>
        <ns2:Surname>Snow</ns2:Surname>
        <ns2:Email>joihn.show@gmail.com</ns2:Email>
        <ns2:Birthday>2005-10-23T04:00:00+03:00</ns2:Birthday>
    </ns2:User>
</ns2:Request>
"""

namespaces = {"ns2": "urn://www.example.com"}

xml = ET.fromstring(data)

name = xml.find(".//ns2:Name", namespaces).text
surname = xml.find(".//ns2:Surname", namespaces).text
email = xml.find(".//ns2:Email", namespaces).text
birthday = xml.find(".//ns2:Birthday", namespaces).text

print("Name:", name)
print("Surname:", surname)
print("Email:", email)
print("Birthday:", birthday)

Этот код найдет и выведет значения полей Name, Surname, Email и Birthday из XML.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы