// Mathieu Jacomy @ Sciences Po Médialab & WebAtlas // (requires sigma.js to be loaded) sigma.publicPrototype.parseGexf = function(gexfPath) { // Load XML file: var gexfhttp, gexf; var sigmaInstance = this; gexfhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); gexfhttp.overrideMimeType('text/xml'); gexfhttp.open('GET', gexfPath, false); gexfhttp.send(); gexf = gexfhttp.responseXML; var viz='http://www.gexf.net/1.2draft/viz'; // Vis namespace var i, j, k; // Parse Attributes // This is confusing, so I'll comment heavily var nodesAttributes = []; // The list of attributes of the nodes of the graph that we build in json var nodesAttributesDict = {}; var edgesAttributes = []; // The list of attributes of the edges of the graph that we build in json var edgesAttributesDict = {}; var attributesNodes = gexf.getElementsByTagName('attributes'); // In the gexf (that is an xml), the list of xml nodes 'attributes' (note the plural 's') for(i = 0; i0){ sizeNode = sizeNodes[0]; size = parseFloat(sizeNode.getAttribute('value')); } var positionNodes = nodeNode.getElementsByTagName('position'); positionNodes = positionNodes.length ? positionNodes : nodeNode.getElementsByTagNameNS('*','position'); if(positionNodes.length>0){ var positionNode = positionNodes[0]; x = parseFloat(positionNode.getAttribute('x')); y = parseFloat(positionNode.getAttribute('y')); } var colorNodes = nodeNode.getElementsByTagName('color'); colorNodes = colorNodes.length ? colorNodes : nodeNode.getElementsByTagNameNS('*','color'); if(colorNodes.length>0){ colorNode = colorNodes[0]; color = '#'+sigma.tools.rgbToHex(parseFloat(colorNode.getAttribute('r')), parseFloat(colorNode.getAttribute('g')), parseFloat(colorNode.getAttribute('b'))); } var colorsProcessed = {}; if (nodeJSON.colors) { for (var key in nodeJSON.colors) { if (nodeJSON.colors.hasOwnProperty(key)) { // Get the rgb string for this property, e.g., "rgb(198,116,255)" var rgbStr = nodeJSON.colors[key]; // Remove "rgb(" and ")" then split by comma to extract r, g, b values var rgbArr = rgbStr.replace(/rgb\(|\)/g, '').split(','); var r_val = parseInt(rgbArr[0].trim(), 10); var g_val = parseInt(rgbArr[1].trim(), 10); var b_val = parseInt(rgbArr[2].trim(), 10); // Convert to hex and store under the corresponding key colorsProcessed[key] = '#' + sigma.tools.rgbToHex(r_val, g_val, b_val); } } } // Create Node var node = {label:label, size:size, x:x, y:y, attributes:{}, color:color, colors: colorsProcessed}; // The graph node // Attribute values var attvalueNodes = nodeNode.getElementsByTagName('attvalue'); for(k=0; k