使用etree查找xml文件中内部文本的所有出现

时间:2016-10-11 11:32:04

标签: python xml xpath tree elementtree

我根本不熟悉python和树,但遇到了一些问题。

我将以下数据集结构化为:

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
  <node id="node1">
    <data key="label">node1</data>
    <data key="degree">6</data>
  </node>
  <node id="node2">
    <data key="label">node2</data>
    <data key="degree">32</data>
  </node>
  <node id="node3">
    <data key="label">node3</data>
    <data key="degree">25</data>
  </node>
</graphml>

我希望能够覆盖并打印&lt;的所有内部文本。数据键=&#34;标签&#34;&gt;使用etree的元素。换句话说,得到以下结果:

"node1"
"node2"
"node3"

我已经尝试了没有运气的{({3}})的itertext(),以及错误的xpath表达式。

我确信有一个简单的解决方案,希望你们能帮忙!

2 个答案:

答案 0 :(得分:0)

您可能忘记了命名空间。尝试这样的事情:

import xml.etree.ElementTree as ET

root = ET.fromstring(countrydata)

ns = {'graphml': 'http://graphml.graphdrawing.org/xmlns'}

for element in root.findall(".//graphml:node[@id]",ns):
    print(element.attrib['id'])

答案 1 :(得分:0)

这可以在python 2.7上完成:

import xml.etree.ElementTree as ET
root = ET.fromstring(data)

elts = root.findall('.//*[@key="label"]')
for e in elts:
    print(e.text)