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

时间:2018-05-18 20:29:45

标签: python lxml

所以我希望使用lxml和python从树中获取所有文本,如下所示:

provider.getAccount().getName()

这里的挑战是我只想要Text标签中存在的文本,而不是像其他标签一样存在于其他标签中的文本。我需要一种方法来迭代Body中的所有节点,然后组合来自节点的文本。这行代码让我非常接近我想要的,但也从其他标签中获取文本。所以我需要一种方法来清除我想要的文本。

<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>

再次使用上面的树和代码输出是: “一些文字文字我不想要一些我不想要的文字文字” 我需要: “有些文字有些文字”

提前感谢所有帮助!

1 个答案:

答案 0 :(得分:2)

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