#python #xml #elementtree
#python #xml #elementtree
Вопрос:
У меня есть следующий XML-файл, который называется Artists.xml , который содержит информацию о нескольких исполнителях, как показано ниже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Artists>
<Singer name="Britney">
<Albums>7</Albums>
<Country>USA</County>
<Last Single> Piece of Me
<Year>2011</Year>
</Last Single>
</Singer>
<Singer name="Justin">
<Albums>8</Albums>
<Country>USA</County>
<Last Single> Rock Your Body
<Year>2004</Year>
</Last Single>
</Singer>
</Artsts>
Я использую библиотеку Python ElementTree для извлечения содержимого всех тегов. Пока это код Python, который я написал:
from xml.etree import cElementTree as ET
tree = ET.parse('Artists.xml')
root = tree.getroot()
for child in root:
for content in child:
print(child[content].text)
Несмотря на это, когда я запускаю скрипт, я не вижу никаких входных данных в своей консоли. Я хотел бы увидеть что-то вроде: 7 USA Piece of Me 2011, 8 USA Rock Your Body 2004.
может кто-нибудь помочь мне понять, что я делаю неправильно? Заранее спасибо!
Комментарии:
1. Ваш xml неправильно отформатирован.
2. Пользователь ElementTree.iterparse
Ответ №1:
используя xml.etree.ElementTree
test.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Artists>
<Singer name="Britney">
<Albums>7</Albums>
<Country>USA</Country>
<LastSingle>
Piece of Me
<Year>2011</Year>
</LastSingle>
</Singer>
<Singer name="Justin">
<Albums>8</Albums>
<Country>USA</Country>
<LastSingle> Rock Your Body
<Year>2004</Year>
</LastSingle>
</Singer>
</Artists>
Следовательно:
from xml.etree import ElementTree
tree = ElementTree.parse('test.xml')
root = tree.getroot()
results = root.findall('Singer')
for elem in results:
for e in elem:
print(e.text.strip())
ВЫВОД:
7
USA
Piece of Me
8
USA
Rock Your Body
Process finished with exit code 0
Комментарии:
1. Привет, спасибо за ваш ответ! Что, если у меня большой документ, и я все еще хочу, чтобы все содержимое было напечатано, но не знаю, какой дочерний узел содержится в корне дерева?
Ответ №2:
Общий подход. Преобразуйте XML в dict и распечатайте dict. (Файл 55726013.xml содержит ваши примерные данные). Как вы можете видеть, код не имеет никаких знаний о структуре XML.
import xmltodict
import json
with open('55726013.xml') as fd:
doc = xmltodict.parse(fd.read())
print(json.dumps(doc, indent=4))
Вывод
{
"Artists": {
"Singer": [
{
"@name": "Britney",
"Albums": "7",
"Country": "USA",
"LastSingle": {
"Year": "2011",
"#text": "Piece of Me"
}
},
{
"@name": "Justin",
"Albums": "8",
"Country": "USA",
"LastSingle": {
"Year": "2004",
"#text": "Rock Your Body"
}
}
]
}
}