/** * Unmarshall a XML diagram file into an object structure (DiaDiagram) * * @param string filename The diagram filename (.dia) * @return org.dia.DiaDiagram */ public static function unmarshal($diagram) { // suck in XML document if (!($dom = domxml_open_file($diagram, DOMXML_LOAD_PARSING, $error))) { throw new XMLFormatException(xp::stringOf($error)); } // initialize XPath $XPath = new XPath($dom); // TODO: if the URI is wrong, unmarshalling won't work! $XPath->registerNamespace('dia', 'http://www.lysator.liu.se/~alla/dia/'); // new (unused): $XPath->registerNamespace('dia', 'http://www.gnome.org/projects/dia/'); // go $Dia = DiaUnmarshaller::recurse($XPath, $dom->document_element(), 'org.dia.DiaDiagram'); Console::writeLine('DiaUnmarshaller used up ' . round(memory_get_usage() / 1024, 2) . ' Kb of memory.'); return $Dia; }