Exemple #1
0
 // Cross browser XMLParser
 function parseXML(str) {
     try {
         var doc;
         if (window.DOMParser) {
             var parser = new DOMParser();
             doc = parser.parseFromString(str, 'text/xml');
         } else { // IE
             doc = new ActiveXObject('Microsoft.XMLDOM');
             doc.async = 'false';
             // Remove DOCTYPE ?
             doc.loadXML(str);
         }
         if (
             !doc || !doc.documentElement
             || doc.getElementsByTagName('parsererror').length
         ) {
             log('Invalid XML: ' + str);
         } else {
             return doc;
         }
     } catch (e) {
         return null;
     }
 }
Exemple #2
0
        var parseNode = function(xmlNode, parent, parentStyle) {
            var nodeName = xmlNode.nodeName.toLowerCase();
            if (nodeName === 'defs') {
                inDefine = true;
            }
            var styleMap;
            var el;
            if (inDefine) {
                var parser = defineParsers[nodeName];
                if (parser) {
                    var def = parser(xmlNode);
                    var id = xmlNode.getAttribute('id');
                    if (id) {
                        defs[id] = def;
                    }
                }
            } else {
                var parser = nodeParsers[nodeName];
                if (parser) {
                    el = parser(xmlNode, parentStyle, defs);
                    if (!el) {
                        log("Unsupported svg node " + nodeName);
                        return;
                    }
                    // 解析通用样式
                    styleMap = parseAttributes(xmlNode);
                    // PENDING
                    for (var name in parentStyle) {
                        if (!styleMap[name]) {
                            styleMap[name] = parentStyle[name];
                        }
                    }
                    // 解析坐标变换
                    var m = parseTransformAttribute(xmlNode);
                    if (m) {
                        el.transform = m;
                        el.decomposeTransform();
                    }
                    var id = xmlNode.getAttribute('id');
                    if (id) {
                        el.id = namespace + '/' + id;
                    }
                    // Is a shape
                    if (el.type !== 'group') {
                        extendShapeCommonStyle(el, styleMap, defs);
                    }
                    parent.addChild(el);
                }
            }

            if (inDefine || nodeName === 'g') {
                var child = xmlNode.firstChild;
                while (child) {
                    if (child.nodeType === 1){
                        parseNode(child, el, styleMap);
                    }
                    child = child.nextSibling;
                }
            }

            // Quit define
            if (nodeName === 'defs') {
                inDefine = false;
            }
        }