无法使用 elementtree 解析 graphml 文件
unable to parse graphml file with elementtree
xml
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<graph id="G" edgedefault="undirected">
<node id="n0"/>
<node id="n1"/>
<edge id="e1" source="n0" target="n1"/>
</graph>
</graphml>
python代码
tree = ET.parse(my_file.xml).getroot()
print tree.findall('graph') # returns []
如果我从 graphml 标签中删除属性,那么它就可以工作,returns 元素
您得到的是一个空列表,因为您的 XML 文档中没有简单的 graph
元素。您的文档有一个默认的 XML 命名空间(属于 http://graphml.graphdrawing.org/xmlns
),因此文档中没有显式命名空间前缀的任何元素都在该命名空间中。
这意味着在请求元素时,您需要提供命名空间信息以及标签名称。例如:
>>> tree.findall('{http://graphml.graphdrawing.org/xmlns}graph')
[<Element {http://graphml.graphdrawing.org/xmlns}graph at 0x7f2f3e3cf5f0>]
>>>
LXML 文档有一节关于 working with namespaces。
xml
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<graph id="G" edgedefault="undirected">
<node id="n0"/>
<node id="n1"/>
<edge id="e1" source="n0" target="n1"/>
</graph>
</graphml>
python代码
tree = ET.parse(my_file.xml).getroot()
print tree.findall('graph') # returns []
如果我从 graphml 标签中删除属性,那么它就可以工作,returns 元素
您得到的是一个空列表,因为您的 XML 文档中没有简单的 graph
元素。您的文档有一个默认的 XML 命名空间(属于 http://graphml.graphdrawing.org/xmlns
),因此文档中没有显式命名空间前缀的任何元素都在该命名空间中。
这意味着在请求元素时,您需要提供命名空间信息以及标签名称。例如:
>>> tree.findall('{http://graphml.graphdrawing.org/xmlns}graph')
[<Element {http://graphml.graphdrawing.org/xmlns}graph at 0x7f2f3e3cf5f0>]
>>>
LXML 文档有一节关于 working with namespaces。