我是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'
遗失了。有人能帮我吗?提前谢谢!
答案 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())