Разбор XML в Python
У меня большой XML-файл, и мне нужно отформатировать его, чтобы получить необходимые данные из определенных элементов в нем и распечатать только данные, необходимые в другой файл. В XML-файле у меня есть несколько текстовых тегов, относящихся к разным разговорам с идентификаторами и авторами, которые имеют идентификаторы после тега автора. Мне нужны не все тексты от всех авторов, а конкретные тексты, которые у меня есть. Как мне написать функцию, которая определяет ее только для выбора и записи разговоров, где author = id1 или id2 или id3....... и т. Д.? Вот как выглядит документ...
<conversations>
<conversation id="e621da5de598c9321a1d505ea95e6a2d">
<message line="1">
<author>97964e7a9e8eb9cf78f2e4d7b2ff34c7</author>
<time>03:20</time>
<text>Hola.</text>
</message>
<message line="2">
<author>0158d0d6781fc4d493f243d4caa49747</author>
<time>03:20</time>
<text>hi.</text>
</message>
</conversation>
<conversation id="3c517e43554b6431f932acc138eed57e">
<message line="1">
<author>505166bca797ceaa203e245667d56b34</author>
<time>18:11</time>
<text>hi</text>
</message>
<message line="2">
</conversation>
<conversation id="3c517e43554b6431f932acc138eed57e">
<author>505166bca797ceaa203e245667d56b34</author>
<time>18:11</time>
<text>Aujourd.</text>
</message>
<message line="3">
<author>4b66cb4831680c47cc6b66060baff894</author>
<time>18:11</time>
<text>hey</text>
</message>
</conversation>
</conversations>
1 ответ
import xml.etree.ElementTree as ET
tree = ET.parse('conversations.xml')
for node in tree.iter():
if node.tag == "conversations":
continue
if node.tag == "conversation":
print("\n") # visual break, new conversation
print("{} {}".format(node.tag, node.attrib))
continue
if node.tag == "message":
print("{} {}".format(node.tag, node.attrib))
continue
print("{} {}".format(node.tag, node.text))
Таким образом, используя вышеописанное, вы сможете проверить идентификатор, используя аналогичную логику. Если вы ищете 97964e7a9e8eb9cf78f2e4d7b2ff34c7 и т. Д., Составьте список или диктуйте.
authors = ['97964e7a9e8eb9cf78f2e4d7b2ff34c7']
for node in tree.iter():
if node.tag == "author" and node.text in authors:
print('found')