Получить весь текст в узле lxml - PullRequest
0 голосов
/ 07 ноября 2018

Я использую следующий подход для печати всего текста (не HTML, но фактический текст, содержащийся) в узле элемента:

''.join(node.xpath('//div[@class="title_wrapper"]')[0].itertext())

Есть ли более чистый подход к этому?

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете использовать функцию XPath string().

Если у вас большие куски пустого пространства из смешанного контента, вы можете использовать функцию XPath normalize-space().

Пример всех трех (твоих и моих двоих) ...

Python

from lxml import etree

xml = """<doc>
    <div class="title_wrapper">Some text. Some <span>more</span> text. 
    <span>Even <span>m<span>o</span>re</span> text!</span>
    </div>
</doc>"""

tree = etree.fromstring(xml)

print(''.join(tree.xpath('//div[@class="title_wrapper"]')[0].itertext()))

print(tree.xpath('string(//div[@class="title_wrapper"])'))

print(tree.xpath('normalize-space(//div[@class="title_wrapper"])'))

выход

Some text. Some more text. 
    Even more text!

Some text. Some more text. 
    Even more text!

Some text. Some more text. Even more text!
...