Разбор 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')
Другие вопросы по тегам