我有一个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>
答案 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')