无法遍历mxgraph中的xml文件以获取指定子节点的属性值?

时间:2019-09-17 06:25:12

标签: javascript xml mxgraph

我正在尝试遍历XML文件。基于xml文件中的值,我想更新另一个XML文件。我想获取“ mxcell”值及其属性。我尝试使用mxutil.parseXml()解析xml并以以下方式检索子节点。我将x的值作为nodelist [body]获取,其中body给解析器错误。

遍历xml的代码

var xmldoc = mxUtils.parseXml(nodes);
var x = xmldoc.documentElement.childNodes;

XML文件节点

<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="Kn0cXeNcbUv7v0NK2pj5-1" value="" style="shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;align=center;perimeter=ellipsePerimeter;outlineConnect=0;outline=standard;symbol=general;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="50" height="50" as="geometry"/>
</mxCell><mxCell id="Kn0cXeNcbUv7v0NK2pj5-2" value="" style="shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;align=center;perimeter=ellipsePerimeter;outlineConnect=0;outline=throwing;symbol=general;" vertex="1" parent="1"><mxGeometry x="20" y="90" width="50" height="50" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>

我想在变量中检索每个“ mxcell”样式属性的值。

1 个答案:

答案 0 :(得分:0)

我认为您的解析错误是由于您将节点直接传递给'mxUtils.parseXml'方法而造成的。 documentation指出您应该传递一个字符串作为参数。

考虑到这一点,您可以将XML作为字符串提供:

var doc = mxUtils.parseXml(
    '<mxGraphModel>' + 
        '<root>' + 
            '<mxCell id="0"/>' + 
            '<mxCell id="1" parent="0"/>' + 
            '<mxCell id="Kn0cXeNcbUv7v0NK2pj5-1" value="" style="shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;align=center;perimeter=ellipsePerimeter;outlineConnect=0;outline=standard;symbol=general;" vertex="1" parent="1">' + 
                '<mxGeometry x="20" y="20" width="50" height="50" as="geometry"/>' + 
            '</mxCell>' + 
            '<mxCell id="Kn0cXeNcbUv7v0NK2pj5-2" value="" style="shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;align=center;perimeter=ellipsePerimeter;outlineConnect=0;outline=throwing;symbol=general;" vertex="1" parent="1">' + 
                '<mxGeometry x="20" y="90" width="50" height="50" as="geometry"/>' + 
            '</mxCell>' + 
        '</root>' + 
    '</mxGraphModel>'
);

然后您可以获取mxCell标签的样式。我正在生成一个对象,其ID为mxCell作为键,style属性为值:

var data = {};
doc.querySelectorAll('mxcell').forEach(function(node) {
    data[node.id] = node.getAttribute('style');
});