使用 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'
所以我希望使用 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'