@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

Подскажите как(с помощью чего) извлечь весь текст находящийся между тегами и ?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 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']
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Popmechanic Москва
от 100 000 до 150 000 руб.
Panda Media Нижний Новгород
от 70 000 руб.
18 авг. 2018, в 09:13
13000 руб./за проект
18 авг. 2018, в 01:10
17000 руб./за проект
17 авг. 2018, в 23:00
5500 руб./за проект