Python:在gxl文件中查找结束节点(叶子)

时间:2017-07-17 16:34:26

标签: python nodes

我有一个gxl文件,我想找到它的所有端节点(叶子)并存储每个端节点名称(在标记节点,name属性中)。 我意识到在gxl文件中,端节点是具有节点标签但没有边缘标签的节点。

我想找到所有没有任何优势的节点。

所以我该怎么办? 这是我的gxl文件示例链接: https://gist.github.com/anonymous/61c1afd751214a0473fd62ee74a3b1d6

例如,此处节点id 270是结束节点,因为它没有任何边缘标记。 :

<node id="N_270"> 
<attr name="name"> 
<string>
android.content.Context 
java.lang.String getString(int) 
</string> 
</attr>
</node> 
<node id="N_271"> 
<attr name="name"> 
<string>android.view.ViewGroup 
voidinit(android.content.Context,android.util.AttributeSet,int) 
</string> 
</attr> 
</node>
<edge from="N_271" to="N_291" isdirected="true" id="N_271--N_291"> 
</edge> 

1 个答案:

答案 0 :(得分:0)

考虑使用Python标准库中的xml.etree.ElementTree

import xml.etree.ElementTree as et

gxl_file_path = "C:\\some\\file\\path\\file.gxl"

tree = et.parse(gxl_file_path)
root = tree.getroot()  # At this point you can traverse the node structure as needed

假设您需要找到节点的名称:

>>> root.tag
'gxl'

或者如果您想迭代所有边缘节点:

for edge in root.iter('edge'):
    # ... Logic ...

我无法确切地说出你要解析的是什么,但我相信你应该迭代'节点'节点,达到这样的程度:

for node in root.iter('node'):
    if node.find('attr'):  # If the attribute node is present
        name = node.find('attr').get('name')