Извлечь весь текст из определенного тега XML с помощью lxml - PullRequest
0 голосов
/ 18 мая 2018

Итак, я собираюсь использовать lxml и python для получения всего текста из дерева, которое выглядит следующим образом:

<Body>
  <X1>
    <Text>some text</Text>
    <Other>text I don't want</Other>
  </X1>
  <X2>
    <Text>some text</Text>
    <Other>text I don't want</Other>
  </X2>

Проблема здесь в том, что мне нужен только текст, который существует в теге Text,но не текст, который существует в других тегах, таких как Другое.Мне нужен способ перебрать все узлы в теле, а затем объединить текст из узлов.Эта строка кода приближает меня к тому, что я хочу, но также берет текст из других тегов.Поэтому мне нужен способ отсеять только текст, который я хочу.

text = "".join([x for x in root.find('.//Body').itertext()]).strip().replace('\n', '')

Снова с помощью приведенного выше дерева и кода получим: «некоторый текстовый текст, я не хочу некоторый текстовый текст, который я не делаюхочу "В то время как мне нужно:" какой-нибудь текст какой-то текст "

Спасибо за всю помощь заранее!

1 Ответ

0 голосов
/ 18 мая 2018

Простой оператор xpath должен делать

>>> text="""<Body>
...   <X1>
...     <Text>some text</Text>
...     <Other>text I don't want</Other>
...   </X1>
...   <X2>
...     <Text>some text</Text>
...     <Other>text I don't want</Other>
...   </X2>
... </Body>"""
>>> 
>>> import lxml.etree
>>> doc = lxml.etree.fromstring(text)
>>> ' '.join(e.text for e in doc.xpath('//Text'))
'some text some text'
...