【问题标题】:mxGraph - Displaying a diagram by loading a XMLmxGraph - 通过加载 XML 来显示图表
【发布时间】:2019-07-17 12:01:26
【问题描述】:

How to get the XML from mxGrpah diagram? 的帮助下,能够从图形编辑器中获取动态 XML。 现在,我需要通过加载 XML(反向算法)来显示图表

【问题讨论】:

    标签: javascript php mxgraph


    【解决方案1】:

    好的,类似于How to get the XML from mxGrpah diagram? 的回答,我还不清楚如何获取保存整个图形的graph 对象,因此我提出以下解决方法:

    1) 获取原始图形对象的引用到您的 index.html 代码中

    。在 index.html 中添加一个全局变量来获取graph 对象的引用

    var universalGraph;
    

    ii. 进入一个已创建 graph 对象的 .js 文件(例如转到 installListeners 函数上的 js/view/mxGraphView将图形对象的实例分配给您的全局可访问引用

    mxGraphView.prototype.installListeners = function(){
    var graph = this.graph;
    var container = graph.container;
    universalGraph = graph; //this way, you will have access from .index.html to the graph object and you will be able to import the xml as shown in the example here https://stackoverflow.com/questions/56664578/mxgraph-save-functionality-not-working-locally/56735153#56735153 
    

    正如您将看到的,现在建议使用全局Graph.xml 的解决方案here 是多余的,因为现在您将始终可以访问graph 对象:)。

    2) 由于您现在有了 graph 对象,您可以将它用于任何您想要的目的(导出/导入 xml 状态)

    编辑

    我还发布了一个示例,说明您应该如何在 index.html 中上传 xml

    function uploadXML(){
            let xml = '<thexml_you_got_from_the_export><thexml_you_got_from_the_export/>';
            let doc = mxUtils.parseXml(xml);
            let codec = new mxCodec(doc);
            codec.decode(doc.documentElement, universalGraph.getModel());
            let elt = doc.documentElement.firstChild;
            let cells = [];
            while (elt != null)
            {
                let cell = codec.decode(elt)
                if(cell != undefined){
                    if(cell.id != undefined && cell.parent != undefined && (cell.id == cell.parent)){
                        elt = elt.nextSibling;
                        continue;
                    }
                    cells.push(cell);
                }
                elt = elt.nextSibling;
            }
            universalGraph.addCells(cells);
    
        }
    

    【讨论】:

    • 感谢@NickAth!我可以用你的例子上传我自己的 xml,但是我怎样才能有当前的 xml 来导出它呢?这个解决方案有效:stackoverflow.com/questions/56899522/… 但点击事件对我的项目不利。
    • 我将监听器更改为 mouseMove ,它可以工作,但我不确定这是否是最好的方法
    • 您到底想做什么?当你想要你的 xml 被导出?
    • 我有一个自定义导出按钮可以将 xml 导出到数据库。
    • 这似乎对我不起作用@NickAth,我不断收到重复 ID 错误
    【解决方案2】:

    非常感谢@NickAth,另外,我尝试了自己的分析发现以下解决方案运行良好。

    var xml = {xml};
    var ui = new EditorUi(new Editor());
    var doc = mxUtils.parseXml(xml);
    ui.editor.setGraphXml(doc.documentElement);
    

    【讨论】:

    • 太棒了!请记住,通过这种方式,您可以使用与示例不同的另一个 EditorUI,现在您还可以使用 ui.editor.graph 访问图形对象 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-03-30
    • 2013-07-04
    • 1970-01-01
    • 2013-07-27
    • 2023-04-02
    相关资源
    最近更新 更多