Задать вопрос
@studprogrammist

Как извлечь текст находящийся между тегами?

Имеем вот такой код, XML парсера:
import xml.etree.ElementTree as ET

doc = """
<?xml version="1.0" encoding="ANSI" ?>
<data>
     <items>
         <item name="item1">1</item>
         <item name="item2">2</item>
         <item name="item3">3</item>
         <item name="item4">4</item>
     </items>
</data>
.----------------------------------------------------------
"""

tree = ET.fromstring(doc)

print(tree.find('.//item[@name="item1"]').text)
print(tree.find('.//item[@name="item4"]').text)


Как видите, начинается не с основного тега, как в прочем и заканчиваеться.
Отсюда и ошибка:
xml.etree.ElementTree.ParseError: XML or text declaration not at start of entity

Подскажите как(с помощью чего) извлечь весь текст находящийся между тегами и ?
  • Вопрос задан
  • 1488 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@javedimka
Хочу сока
lxml
>>> import lxml.etree
>>> doc = """
... <?xml version="1.0" encoding="ANSI" ?>
... <data>
...      <items>
...          <item name="item1">1</item>
...          <item name="item2">2</item>
...          <item name="item3">3</item>
...          <item name="item4">4</item>
...      </items>
... </data>
... .----------------------------------------------------------
... """
>>> parser = lxml.etree.XMLParser(recover=True)
>>> tree = lxml.etree.fromstring(doc, parser)
>>> [element.text for element in tree.iter('item')]
['1', '2', '3', '4']

Без lxml можно так:
>>> import xml.etree.ElementTree as ET
>>> doc = """
... <?xml version="1.0" encoding="ANSI" ?>
... <data>
...      <items>
...          <item name="item1">1</item>
...          <item name="item2">2</item>
...          <item name="item3">3</item>
...          <item name="item4">4</item>
...      </items>
... </data>
... .----------------------------------------------------------
... """
>>> tree = ET.fromstring(doc.strip('\n-.'))
>>> [element.text for element in tree.iter('item')]
['1', '2', '3', '4']
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы