LXML:在元素children之间获取文本

时间:2018-03-31 19:06:29

标签: python html lxml

我有一个结构严重的html模板,其中我的<section>元素包含多个元素(p,figure,a等),但中间还包含原始文本。如何访问所有这些文本片段并进行适当的编辑(我需要的是用标签替换所有$$code$$?) section.textsection.tail都返回空字符串......

2 个答案:

答案 0 :(得分:1)

检查紧接在文本之前的完整标记的.tail。因此,在<section>A<p>B</p>C<p>D</p>E</section>中,两个.tail元素的<p>将包含C和E.

示例:

from lxml import etree

root = etree.fromstring('<root><section>A<p>B</p>C<p>D</p>E</section></root>')

for section_child in root.find('section'):
    section_child.tail = section_child.tail.lower()

print(etree.tounicode(root))

结果:

<root><section>A<p>B</p>c<p>D</p>e</section></root>

答案 1 :(得分:0)

我从发布的问题Parse XML text in between elements within a root element

中的答案中了解到
from lxml import etree


xml = '<a>aaaa1<b>bbbb</b>aaaa2<c>cccc</c>aaaa3</a>'
element = etree.fromstring(xml)
for text in element.xpath('text()'):
    xml = xml.replace(f'>{text}<', f'>{text.upper()}<')

对此的一个担忧是xml中的CDATA,但是我想这不是html的问题。