2015-03-02 3 views
0

XMLне смог разобрать GraphML файл с ElementTree

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

питон код

tree = ET.parse(my_file.xml).getroot() 

print tree.findall('graph') # returns [] 

Если удалить атрибуты из GraphML тега, то он работает, возвращает элемент

ответ

0

Вы находитесь получив пустой список, потому что в вашем XML-документе нет простых элементов . У вашего документа есть пространство имен 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.

Смежные вопросы