Как выполнить разбор (парсинг) данного XML-документа?

Как я могу извлечь значения полей Name, Surname, Email и Birthday из данного 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>[email protected]</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

Учтите, что я внес изменения в поиск каждого элемента, чтобы соответствовать его имени в XML-файле.
  • 17 октября 2023 г. 18:29
Ответы на вопрос 2
Ваш код для разбора XML-файла достаточно правильный, но для того, чтобы извлечь значения полей Name, Surname, Email и Birthday, вам необходимо использовать полные пути к элементам, включая пространство имён. 

Обновите свой код следующим образом:

```
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>[email protected]</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:User/ns2:Name", namespaces).text
surname = xml.find("./ns2:User/ns2:Surname", namespaces).text
email = xml.find("./ns2:User/ns2:Email", namespaces).text
birthday = xml.find("./ns2:User/ns2:Birthday", namespaces).text

print(name, surname, email, birthday)
```

Теперь вы сможете извлечь значения полей Name, Surname, Email и Birthday из XML-документа.
from bs4 import BeautifulSoup

# Используем BeautifulSoup для работы с твоей библиотекой
soup = BeautifulSoup(data, 'xml')

# Находим значение элемента 'Name' и сохраняем его в переменную name
name = soup.find('ns2:Name').text

# Находим значение элемента 'Surname' и сохраняем его в переменную surname
surname = soup.find('ns2:Surname').text

# Находим значение элемента 'Email' и сохраняем его в переменную email
email = soup.find('ns2:Email').text

# Находим значение элемента 'Birthday' и сохраняем его в переменную birthday
birthday = soup.find('ns2:Birthday').text
Похожие вопросы