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. Java并发基础--Thread类

    一.Thread类的构成 Thread类实现Runnable接口.部分源码如下: 二.Thread类常用方法 1.currentThread()方法 currentThread()方法可以返回代码段正 ...

  2. 02-Mysql数据库----初识

    什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中描述一个事物,就 ...

  3. 命令行编译 WPF

    在开发调试代码 WPF 时,经常需要在修改完成代码后,点击 Rebuild,然后到指定文件夹下点击打开对应的 .exe 验证程序是否正确, 可以通过以下命名实现修改程序后,点击一个 .bat 文件,直 ...

  4. Markdown常用的几种语法

    在VScode上面写的,现将代码粘贴如下:(在VScode里运行下即可) # Markdown语法 # Ctrl + k v 打开侧边预览 ## 一.加粗斜体删除线 **这是要加粗的文字** *这是要 ...

  5. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

  6. 安装CentOS 5.x与多重引导小技巧

    不建议使用Virtualbox安装Linux来学习!本处是学习在计算机上安装Linux. 但现在条件有限,就先使用Virtualbox练习!

  7. 【tips】【词频统计】中可能用到的资源,以C++为例

    前言 我不知道C#什么情况,不过C++里面,什么参数都不传时,argc=1,argv里面是当前程序名.当你传入dir时,argc=2,当你传入-e dir时,argc=3. 这个文章十分适合有一点C语 ...

  8. Linux e1000e网卡驱动

    目录 识别网卡 命令行参数 附加配置 技术支持 一.识别网卡e1000e驱动支持Intel所有的GbE PCIe网卡,除了82575,82576,基于82580系列的网卡.提示:Intel(R) PR ...

  9. iOS-登录发送验证码时60秒倒计时,直接用

    __block NSInteger timeout= ; //倒计时时间 KWeakSelf dispatch_queue_t queue = dispatch_get_global_queue(DI ...

  10. 域名解析的DNS缓存如何清理

    域名解析(DNS)缓存是什么? 域名解析缓存又名DNS缓存,常见表现名称是TTL:(TimeToLive)生存时间,就是域名解析记录在DNS服务器中的存留有效时间. 当各地的DNS服务器接受到解析请求 ...