XML解析代码
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map; import org.apache.commons.lang.StringUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder; public class ModelParser
{
private Map<String, List<ModelEntity>> modelEntitiesMap = new HashMap<String, List<ModelEntity>>(); public ModelParser(String filePath, String fileName)
{
parseFile(filePath, fileName);
} private void parseFile(String filePath, String fileName)
{
String fullPath = filePath + fileName;
File modelFile = new File(fullPath); SAXBuilder saxBuilder = new SAXBuilder();
Document document = new Document();
try
{
document = saxBuilder.build(modelFile);
}
catch (JDOMException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
Element rootElement = document.getRootElement();
List<Element> firstElementList = rootElement.getChildren();
for (Element element : firstElementList)
{
String objName = element.getName();
List<ModelEntity> modelEntitiesList = getModelEntities(element);
modelEntitiesMap.put(objName, modelEntitiesList);
}
} private List<ModelEntity> getModelEntities(Element firstElement)
{ List<ModelEntity> modelEntitiesList = new LinkedList<ModelEntity>();
List<Element> tableElementList = firstElement.getChildren("table");
for (Element secondElement : tableElementList)
{
List<Element> columnElementList = secondElement.getChildren();
List<String> columnList = new LinkedList<String>();
for (Element thirdElement : columnElementList)
{
if (StringUtils.isNotBlank(thirdElement.getTextTrim()))
columnList.add(thirdElement.getTextTrim());
}
ModelEntity modelEntity = new ModelEntity();
String name = secondElement.getAttributeValue("name");
String key = secondElement.getAttributeValue("key");
modelEntity.setKey(key);
modelEntity.setColumList(columnList);
modelEntity.setName(name);
modelEntitiesList.add(modelEntity);
}
return modelEntitiesList; } public Map<String, List<ModelEntity>> getModelEntitiesMap()
{
return modelEntitiesMap;
} }
xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<model>
<cell>
<table name="csv1" key="cId">
<column>cId</column>
<column>zhang</column>
<column>xi</column>
</table>
<table name="csv2" key="pId">
<column>pId</column>
<column>zhang </column>
<column>wen </column>
<column></column>
</table>
</cell> <ercl>
<table name="csv3" key="eId">
<column>eId</column>
<column>jing</column>
<column>tao</column>
</table>
<table name="csv4" key="dId">
<column>dId</column>
<column>yang</column>
<column>cun</column>
</table>
</ercl>
</model>
XML解析代码的更多相关文章
- iOS 中的XML解析代码(SAX)
1.XML解析(SAX) NSXMLParser SAX 大文件 1)打开文档 - (void)parserDidStartDocument:(NSXMLParser *)parser 2)开始查找起 ...
- XML解析代码课堂讲解实例
//获取所有的子元素,不包括回车 package com.dom4jDemo; import java.io.File; import java.util.List; import org.dom4j ...
- xml解析代码示例
List<Entry> list = new ArrayList<>(); Entry entry = null; try { int eventType = response ...
- XML解析与xml和Map集合的互转
1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...
- Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)
*Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...
- xml解析技术
本文总结Dom,sax解析, 使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- 【Android】实现XML解析的几种技术
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
随机推荐
- 初识Django —Python API接口编程入门
初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...
- [C/C++] new/delete和malloc/free基本区别
/**便于遗忘时复习**/ 区别一:本质 new/delete 在C++中是运算符不是函数,需要编译器支持.malloc/free是库函数,需要头文件支持,在C语言中使用. 区别二:开辟内存大小 用 ...
- html页面简单制作示例
内有表格布局,具体见 链接: https://pan.baidu.com/s/1V7IcxQ5M-iXVdlzuf8bo-A 密码: 8dp8
- Java语言课程设计
一.项目简介 本实验是对图形用户界面,布局管理器的综合应用,理解Java的处理机制,编写独立运行的窗口 二.项目采用技术 GUI,JAVA 三.功能需求分析 1.使用用户图形界面 2.能够实现年月份的 ...
- redis-20180118
1.redis hash 100% 2.redis list 100% 3.redis sentinel 20%
- 基于bootstrap动态分页
bootstrap本身的分页有分页组件 但是却是静态的,无法满足要求,分页必须根据当前的总页数来展示 使用插件bootstrap-paginator github下载地址 https://github ...
- windows服务那些事
前一段时间由于项目需求,写了一个windows服务.下面总结如下: windows服务其实就是一些后台程序,和其他程序的主要区别是它运行于系统后台.微软公司为了方便我们自己定制我们的服务,提供了很多借 ...
- Spark程序
Spark认识&环境搭建&运行第一个Spark程序 2017-07-09 17:17 by 牛仔裤的夏天, 181 阅读, 0 评论, 收藏, 编辑 摘要:Spark作为新一代大数据计 ...
- P3539 [POI2012]ROZ-Fibonacci Representation
题目描述 The Fibonacci sequence is a sequence of integers, called Fibonacci numbers, defined as follows: ...
- 【题解】ZJOI2007报表统计
洛谷传送门 主要思路大概也是差不多的,对于两种询问分别用线段树与平衡树来维护. 1.MIN_SORT_GAP:显然平衡树简单操作,来一发前驱.后继即可. 2.MIN_GAP:这一个我用的是线段树:可以 ...