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解析代码的更多相关文章

  1. iOS 中的XML解析代码(SAX)

    1.XML解析(SAX) NSXMLParser SAX 大文件 1)打开文档 - (void)parserDidStartDocument:(NSXMLParser *)parser 2)开始查找起 ...

  2. XML解析代码课堂讲解实例

    //获取所有的子元素,不包括回车 package com.dom4jDemo; import java.io.File; import java.util.List; import org.dom4j ...

  3. xml解析代码示例

    List<Entry> list = new ArrayList<>(); Entry entry = null; try { int eventType = response ...

  4. XML解析与xml和Map集合的互转

    1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...

  5. Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)

    *Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...

  6. xml解析技术

    本文总结Dom,sax解析,  使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...

  7. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  8. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  9. 【Android】实现XML解析的几种技术

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

随机推荐

  1. (原创)像极了爱情的详解排序二叉树,一秒get

    排序二叉树(建立.查找.删除) 二叉树我们已经非常熟悉了,但是除了寻常的储存数据.遍历结构,我们还能用二叉树做什么呢? 我们都知道不同的遍历方式会对相同的树中产生不同的序列结果,排序二叉树就是利用二叉 ...

  2. 问题 E: 完数与盈数

    问题 E: 完数与盈数 时间限制: 1 Sec  内存限制: 32 MB提交: 73  解决: 69[提交][状态][讨论版][命题人:外部导入] 题目描述 一个数如果恰好等于它的各因子(该数本身除外 ...

  3. 官方文档 恢复备份指南五 Configuring the RMAN Environment

    本章内容: Configuring the Environment for RMAN Backups    配置RMAN环境 Configuring RMAN to Make Backups to a ...

  4. 学习bash——环境配置

    一.环境配置文件的重要性 Bash在启动时直接读取这些配置文件,以规划好bash的操作环境. 即使注销bash,我们的设置仍然保存. 二.login shell 通过完整的登录流程取得的bash,称为 ...

  5. 基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api

    TP5_Splider 一个基于Thinkphp5+phpQuery 网络爬虫抓取数据接口 统一输出接口数据api.适合正在学习Vue,AngularJs框架学习 开发demo,需要接口并保证接口不跨 ...

  6. 设置select和option的文字居中的方法

    给select设置text-align:center在火狐浏览器下ok,但是在chrome浏览器无效,然后option在两个浏览器下设置text-align:center都是无效的,解决方法,设置样式 ...

  7. (转)java中equals和等号(==)的区别浅谈

    java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==) ...

  8. 建议 里面的sql查找单列 外面的sql查找所有列 这样方便查找数据

  9. BZOJ4597 SHOI2016随机序列(线段树)

    先考虑题目所说的太简单了的问题.注意到只要把加减号相取反,就可以得到一对除了第一项都互相抵消的式子.于是得到答案即为Σf(i)g(i),其中f(i)为前缀积,g(i)为第i个数前面所有符号均填乘号,第 ...

  10. WIN7服务优化,别关太多,小心启动不

    原文链接地址:http://blog.csdn.net/civilman/article/details/51423972 Adaptive brightness 监视周围的光线状况来调节屏幕明暗,如 ...