Mercurial > repos > bernhardlutz > graphconverter
view xgmml_networkx.py @ 3:b7cdfd11614a draft default tip
Uploaded
author | bernhardlutz |
---|---|
date | Tue, 04 Mar 2014 16:50:32 -0500 |
parents | fe01a054a6b2 |
children |
line wrap: on
line source
__author__ = "Yasunobu OKAMURA" __copyright__ = "Copyright (c) 2012 Y.Okamura" __license__ = "GPL v3+" import xml.parsers.expat import networkx as nx class XGMMLParserHelper(object): """ """ def __init__(self, graph=nx.DiGraph()): """ Arguments: - `graph`: Network X graph object """ self._graph = graph self._parser = xml.parsers.expat.ParserCreate() self._parser.StartElementHandler = self._start_element self._parser.EndElementHandler = self._end_element self._tagstack = list() self._current_attr = dict() self._current_obj = dict() def _start_element(self, tag, attr): """ Arguments: - `self`: - `tag`: - `attr`: """ self._tagstack.append(tag) if tag == 'node' or tag == 'edge': self._current_obj = dict(attr) if tag == 'att' and (self._tagstack[-2] == 'node' or self._tagstack[-2] == 'edge'): if attr['type'] == 'string': self._current_attr[attr['name']] = attr['value'] elif attr['type'] == 'real': self._current_attr[attr['name']] = float(attr['value']) elif attr['type'] == 'integer': self._current_attr[attr['name']] = int(attr['value']) elif attr['type'] == 'boolean': self._current_attr[attr['name']] = bool(attr['value']) else: raise NotImplementedError(attr['type']) def _end_element(self, tag): """ Arguments: - `self`: - `tag`: """ if tag == 'node': self._graph.add_node(self._current_obj['id'], label=self._current_obj['label'], **self._current_attr) #print 'add node', self._current_obj elif tag == 'edge': self._graph.add_edge(self._current_obj['source'], self._current_obj['target'], **self._current_attr) self._tagstack.pop() def parseFile(self, file): """ Arguments: - `self`: - `file`: """ self._parser.ParseFile(file) def graph(self): """ Arguments: - `self`: """ return self._graph def XGMMLWriter(file, graph, graph_name): """ Arguments: - `graph`: """ print >>file, """<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <graph directed="1" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.cs.rpi.edu/XGMML"> <att name="selected" value="1" type="boolean" /> <att name="name" value="{0}" type="string"/> <att name="shared name" value="{0}" type="string"/> """.format(graph_name) for onenode in graph.nodes(data=True): id = onenode[0] attr = dict(onenode[1]) if 'label' in attr: label = attr['label'] del attr['label'] else: label = id print >>file, '<node id="{id}" label="{label}">'.format(id=id, label=label) for k, v in attr.iteritems(): print >>file, '<att name="{}" value="{}" type="string" />'.format(k, v) print >>file, '</node>' for oneedge in graph.edges(data=True): print >>file, '<edge source="{}" target="{}">'.format(oneedge[0], oneedge[1]) for k, v in oneedge[2].iteritems(): print >>file, '<att name="{}" value="{}" type="string" />'.format(k, v) print >>file, '</edge>' print >>file, '</graph>'