2017-06-24 4 views
1

Ich habe eine XML (tatsächlich GraphML) Datei wie folgt:Iterieren durch eine GraphML (XML-Datei) und Extrahieren alle Werte

<?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> 

ich durch diese und extrahieren jedes einzelne Element iterieren wollen (drucken) . In einer normalen XML-Datei ist das einigermaßen unkompliziert, aber in diesem Fall kann ich das anscheinend nicht tun. Hier ist der Code, den ich verwende.

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) 

Was gibt mir die ersten beiden zweimal wiederholt Werte, mit anderen Worten:

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

statt:

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

jemand dabei helfen?

Antwort

0

in der verschachtelten Schleife verwendet Sie genauen Pfad von der Wurzel zu node Elemente auf einmal angeben:

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

eval.in demo

+0

Dies funktioniert Danke !, aber es ruft nicht den 'id' Wert für jeden Knoten ab. Ich hätte die Frage klarer stellen sollen. Ich möchte zurück: 0 p sshd (3,2) 1 e user (3) –

+0

einfach hinzufügen: 'node.get ('id')' – har07

0

x nie

for child in root: 
    for x in child: 
Verwandte Themen