使用python从xml数据中提取所有文本

时间:2015-01-05 18:57:48

标签: python xml xml-parsing

我是xml数据处理的新手。我想在以下xml文件中提取文本数据:

<data>
    <p>12345<strong>45667</strong>abcde</p>
</data>

这样预期的结果是:  ['12345','45667', 'abcde']目前我已尝试过:

tree = ET.parse('data.xml')
data = tree.getiterator()
text = [data[i].text for i in range(0, len(data))]

但结果只显示['12345','45667']'abcde'遗失了。有人能帮我吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

尝试使用

执行此操作
import lxml.etree as etree

string = '''
<data>
    <p>12345<strong>45667</strong>abcde</p>
</data>
'''

tree = etree.fromstring(string)

print(tree.xpath('//p//text()'))

Xpath表达式意味着:&#34;选择所有 p 元素,其中包含 text 递归&#34;

输出:

['12345', '45667', 'abcde']

答案 1 :(得分:1)

getiterator()(或者它的替换iter())迭代子标记/元素,而abcde是文本节点,tail itertext() 1}}标签。

您可以使用{{3}}方法:

strong

打印:

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
print list(tree.find('p').itertext())