迭代GraphML(XML)文件并提取所有值

时间:2017-06-24 07:07:17

标签: xml python-3.x loops graphml

我有一个XML(实际上是GraphML)文件,如下所示:

<?xml version="1.0" ?>
<graphml>
    <key attr.name="label" attr.type="string" id="label"/>
    <graph edgedefault="directed" id="">
        <node id="0">
            <type>p</type>
            <label>sshd(3,2)</label>
        </node>
        <node id="1">
            <type>e</type>
            <label>user(3)</label>
        </node> 
    </graph>
</graphml>

我想迭代这个并提取每个单独的项目(打印它)。在普通的XML文件中,这是相当直接的,但在这种情况下,我似乎无法做到这一点。这是我正在使用的代码。

tree = ET.parse(FILENAME)
    root=tree.getroot()
    for child in root:
        for x in child:
            NodeType =  child.find('node').find('type')
            LabelType = child.find('node').find('label')
            print(NodeType.text, LabelType.text)

这给了我两个重复两次的值,换句话说:

p  sshd(3,2)
p  sshd(3,2)

而不是:

p  sshd(3,2)
e  user(3)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

x从未在嵌套循环中使用

for child in root:
    for x in child:

答案 1 :(得分:0)

您可以一次指定从根到node元素的确切路径:

for node in root.findall('graph/node'):
    print(node.find('type').text, node.find('label').text)

<强> eval.in demo