使用 lxml 从某个 xml 标签中提取所有文本

Extract all text from a certain xml tag using lxml

所以我希望使用 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 标签中的文本,而不是存在于其他标签(如 Other)中的文本。我需要一种方法来遍历 Body 中的所有节点,然后组合节点中的文本。这行代码让我非常接近我想要的,但也从其他标签中获取文本。所以我需要一种方法来只删除我想要的文本。

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

再次使用上面的树和代码输出是: "some text text I don't want some text text I don't want" 而我需要: "some text some text"

提前感谢大家的帮助!

一个简单的 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'