`
longsan
  • 浏览: 47210 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mxgraph提交xml数据,java后台解析

    博客分类:
  • java
 
阅读更多

需求:采用mxgraph实现可 拖动 拓扑图,并将移动后的拓扑图数据保存入数据库,供下次显示时读取

前台提交数据

//获取mxgraph拓扑图数据
var enc1 = new mxCodec(mxUtils.createXmlDocument());
var node1 = enc1.encode(graph.getModel());
var xml1 = mxUtils.getXml(node1);
		
//采用dwr的ajax方式向后台提交数据			
TopoService.saveTopoData(xml1,function(result){			//保存结果
});

后台解析数据

主要采用dom4j进行xml解析,分两套方案

/**
	 * 保存拓扑节点坐标信息
	 * @param userInfo
	 * @return
	 */
	public int saveTopoData(String xmldata) { 
		int updateResult = 1;
		Map<String, String> paraMap = new HashMap<String, String>();
 		InputSource in = new InputSource(new StringReader(xmldata));   
		//in.setEncoding("UTF-8");   
		in.setEncoding("GBK"); 
		SAXReader reader = new SAXReader();   
		Document document;
		try {
			document = reader.read(in);
			//获取所有拥有autoSaveNode属性的mxCell节点
			System.out.println("===============所有需要保存的节点============");
			System.out.println("======================方案二========================");
			//---------------------------方案一-----------------------------------------------------
			Element rootElt = document.getRootElement(); // 获取根节点
			Element rootjd = rootElt.element("root");   
			Iterator rootiter = rootjd.elementIterator("mxCell"); // 获取根节点下的子节点mxCell
			while (rootiter.hasNext()) {                 
				Element recordEle = (Element) rootiter.next();
				String autoSaveNode = recordEle.attributeValue("autoSaveNode");
				if(autoSaveNode!=null && !"".equals(autoSaveNode)){
					System.out.println("==节点允许保存:"+autoSaveNode);
					Element xyEle = recordEle.element("mxGeometry");
					System.out.println("节点id:"+recordEle.attributeValue("id"));
					System.out.println("x坐标:"+xyEle.attributeValue("x"));
					System.out.println("y坐标:"+xyEle.attributeValue("y"));
					
					String zbElementX = xyEle.attributeValue("x")==null?"0":xyEle.attributeValue("x");
					String zbElementY = xyEle.attributeValue("y")==null?"0":xyEle.attributeValue("y");
					if (zbElementX.contains(".")) {
						zbElementX = zbElementX.substring(0,zbElementX.indexOf("."));
					}
					
					if (zbElementY.contains(".")) {
						zbElementY = zbElementY.substring(0,zbElementY.indexOf("."));
					}
					  
					 //节点只是移动了位置 
					paraMap.put("deviceid",Long.parseLong(recordEle.attributeValue("deviceid"))+""); 
				    paraMap.put("xpoint",zbElementX); 
				    paraMap.put("ypoint",zbElementY); 
				    
				    topoDAO.saveTopoData(paraMap);
				} 
			}
			//-------------------------------------------------------------------------------------
			//---------------------------方案二-----------------------------------------------------
			/**String xpath = "//mxCell[@autoSaveNode]";
			List<Element> eList = document.selectNodes(xpath);//获取所有拥有autoSaveNode属性的mxCell节点
			
			for (Iterator iterator = eList.iterator(); iterator.hasNext();) {
				Element element =  (Element) iterator.next();  
				Element zbElement =    (Element) element.elements().get(0);//坐标数据节点  
				System.out.println("节点id:"+element.attributeValue("id"));
				System.out.println("x坐标:"+zbElement.attributeValue("x"));
				System.out.println("y坐标:"+zbElement.attributeValue("y"));
				String zbElementX = zbElement.attributeValue("x")==null?"0":zbElement.attributeValue("x");
				String zbElementY = zbElement.attributeValue("y")==null?"0":zbElement.attributeValue("y");
				if (zbElementX.contains(".")) {
					zbElementX = zbElementX.substring(0,zbElementX.indexOf("."));
				}
				
				if (zbElementY.contains(".")) {
					zbElementY = zbElementY.substring(0,zbElementY.indexOf("."));
				}
				  
				 //节点只是移动了位置 
				paraMap.put("deviceid",Long.parseLong(element.attributeValue("deviceid"))+""); 
			    paraMap.put("xpoint",zbElementX); 
			    paraMap.put("ypoint",zbElementY); 
			    
			    topoDAO.saveTopoData(paraMap);
				
			}*/
			
		} catch (Exception e) {
			e.printStackTrace();
			
		} finally { 
			return updateResult;
			
		}

 

 

 

方案一性能比较好,因为他直接是

List<Element> eList = document.selectNodes(xpath);//获取所有拥有autoSaveNode属性的mxCell节点
直接获取需要修改的节点,不需要就该的节点将不进行保存

问题:目前windows下正常,但linux上就出问题了,报什么:缺少jaxen.jar神马的,加入还是不行,搞了半天原因不明,(之后有解决方案:再用,可惜呀

方案二性能较差,因为他要遍历所有的xml节点,如果节点过多,性能明显会比方案一差

 

能力有限呀,呀呀的,勤奋中.............

 

谨以此小文开启自己的第一篇博客,希望能追随各位大牛不断成长,共勉!!!!!!

分享到:
评论
2 楼 longsan 2012-06-28  
不好意思,回复的有些迟,上边的就是思路和部分源码,完整的源码我这也没有了,不过思路上的问题我可以帮你
1 楼 lzllzlwan 2012-06-14  
楼主求源码呀!

相关推荐

    mxGraph插件,java代码xml导出成图片

    在这个场景中,我们需要利用mxGraph前端插件来绘制流程图,并通过Java后端将XML数据转换为图片。 在前端部分,mxGraph允许用户通过JavaScript代码动态构建图形,这些图形可以是流程图、组织结构图等。用户可以...

    mxgraph svg2xml

    mxgraph自定义图元很难调试,这个工具可以通过svg转为xml ,通过微调达到图元定义的目的

    mxGraph图形嵌入开发

    mxgraph下载包中包括用javescript写的前端程序,也包括多个和后端程序(java/C#等等)集成的例子。以下是mxgraph应用的几个例子。(你可以到www.longboo.com的主页下载mxgraph , 和更多的mxgraph实例)

    svg2xml:SVG到XML mxGraph模具定义转换工具

    javac -d classes -classpath lib/mxgraph-core.jar -sourcepath src src/com/mxgraph/svg2xml/Svg2XmlGui.java 跑步 java -classpath lib/mxgraph-core.jar:classes com.mxgraph.svg2xml.Svg2XmlGui 快速入门 运行...

    mxgraph.zip

    在本文中,我们将深入探讨mxgraph.js的核心功能、Node API的使用以及如何结合XML文件进行数据解析和图形展示。 首先,mxgraph.js是mxGraph库的主要JavaScript实现,它提供了丰富的图形绘制和编辑功能。该库支持SVG...

    mxgraph editor

    **mxgraph Editor** 是一款基于JavaScript的开源图形编辑器,专为绘制流程图、工作流、拓扑图等图表设计。它使用了mxGraph库,一个功能强大的图形渲染和操作库,提供了丰富的图形编辑功能。 **mxGraph核心概念:** ...

    mxgraph开发包

    `mxGraph`广泛应用于业务流程图、网络拓扑图、数据可视化、UML图、电路图等领域,尤其适用于需要在线编辑和协作的项目。例如,它可以用于构建流程管理工具、系统架构设计工具、在线图表编辑器等。 总结来说,`...

    mxGraph JS 绘图组件

    mxGraph 是一个 JS 绘图组件适用于需要在网页中设计/编辑 Workflow/BPM 流  程图、图表、网络图和普通图形的 Web 应用程序。... javescript 写的前端程序,也包括多个和后端程序(java/C#等等)集成的例  子。

    mxgraph.MXGRAPH..MXGRAPH..

    3. **API和工具集**:MXGRAPH提供了JavaScript库,包括绘图工具、编辑器和图形解析器。这些工具可以帮助开发者创建可定制的图形界面,例如流程设计器、UML建模工具等。 4. **跨平台支持**:由于其基于Web技术,...

    mxGraph流程图js包

    5. **数据绑定**:mxGraph允许将图形元素与后台数据模型绑定,方便数据同步和更新。 6. **高性能渲染**:使用SVG和VML作为图形渲染引擎,适应不同的浏览器环境,确保图形绘制的性能和兼容性。 7. **导入导出**:...

    在线画图wwwdrawio网站的源码基于mxGraph开发

    6. **导入导出**:源码提供了多种格式的导入导出功能,如XML、PNG、PDF等,这得益于mxGraph的灵活性和强大的数据转换能力。 总结起来,www.draw.io源码的解析,对于想要深入了解图形编辑器开发或者可视化应用的...

    mxgraph-svg2shape:mxGraph SVG到Shape的转换工具

    SVG to XML mxGraph stencil definition translation tool. This was created for internal use, so there are lots of things unfinished. 它包含原始的svg2xml工具; 它旨在改进它并添加以下功能 现代化并为上游...

    mxGraph中文文档.md

    mxgraph.js中文文档是一个官方的api,翻译来源于sunflower(github: https://github.com/SunInfoFE),提供给更多的开发者参考和共享源码资源!

    mxgraph Demo汉化(简单实例)

    mxgraph本身是用JavaScript编写的,但可以通过Java的Rhino或Nashorn引擎在Java应用中运行JavaScript代码,实现跨语言的图形编辑功能。 总的来说,"mxgraph Demo汉化(简单实例)"是一个很好的起点,无论是为了快速...

    mxgraph-eval-1_8_0_6.zip_Java 8_mxgraph_mxgraph-eval

    在实际开发中,开发者需要了解mxGraph的API和数据模型,例如GraphModel、Cell、View和Geometry等。通过这些接口,可以创建、修改和渲染图形。此外,mxGraph还支持事件监听,实现图形的交互功能。 总的来说,mxGraph...

    mxGraph web javaScript

    mxGraph还支持图形的导入和导出,通常可以导出为常见的图形格式如SVG、PNG,或者导出为JSON、XML等结构化数据,便于保存和共享。 综上所述,mxGraph是一个强大且全面的JavaScript库,适合开发各种类型的图形界面,...

    mxgraph api

    **mxGraph API 深度解析** mxGraph是一款强大的JavaScript图形库,专为构建可交互的、基于Web的图表和图形应用而设计。这个API提供了丰富的功能,使得开发者能够轻松地绘制、编辑和操作复杂的图形界面。在本文中,...

    mxGraph压缩包

    6. **数据绑定**:mxGraph允许将图形元素与数据模型绑定,实现数据驱动的图形显示。 7. **导入和导出**:mxGraph支持XML格式的图文件,可以用于保存和加载图形状态。 8. **插件和扩展**:mxGraph的可扩展性很强,...

    基于mxGraph来做的一款web的绘制流程图的javascript库工具mxGraph_gpx.zip

    7. **导出和导入**:支持图形的XML格式(mxGraph Model XML,简称MXGM)进行数据交换,便于保存和恢复工作。 8. **多语言支持**:mxGraph的API文档有多种语言版本,方便全球开发者使用。 在结合Vue框架时,开发者...

    mxgraph1.02WEB图形设计

    7. **数据绑定与导入导出**:mxgraph支持多种数据格式的导入和导出,如JSON、XML和图片。这使得用户可以方便地在不同工具间交换数据,或者将图形数据存储在数据库中。 总的来说,"mxgraph1.02WEB图形设计"为Web开发...

Global site tag (gtag.js) - Google Analytics