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开发中一项重要的技能. 在 ...
随机推荐
- HDFS伪分布式
(一).HDFS shell操作 以上已经介绍了如何搭建伪分布式的Hadoop,既然环境已经搭建起来了,那要怎么去操作呢?这就是本节将要介绍的内容: HDFS自带有一些shell命令,通过这些命令我们 ...
- 基于Vue、web3的以太坊项目开发及交易内幕初探 错误解决总结
基于Vue.web3的以太坊项目开发及交易内幕初探 本文通过宏观和微观两个层面窥探以太坊底层执行逻辑. 宏观层面描述创建并运行一个小型带钱包的发币APP的过程,微观层面是顺藤摸瓜从http api深入 ...
- 学习bash——环境配置
一.环境配置文件的重要性 Bash在启动时直接读取这些配置文件,以规划好bash的操作环境. 即使注销bash,我们的设置仍然保存. 二.login shell 通过完整的登录流程取得的bash,称为 ...
- 【iOS开发】字典的快速赋值 setValuesForKeysWithDictionary
前言 在学习解析数据的时候,我们经常是这么写的:PersonModel.h文件中 @property (nonatomic,copy)NSString *name; @property (nonato ...
- 解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错
解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错 Neither the JAVA_HOME nor the JRE_HOME environment var ...
- filebeat + logstash + elasticsearch + granfa
filebeat + logstash + elasticsearch + granfa https://www.cnblogs.com/wenchengxiaopenyou/p/9034213.ht ...
- hadoop datanode 和 tasktracker起不来
本篇文章主要介绍了"hadoop datanode 和 tasktracker起不来.",主要涉及到hadoop datanode 和 tasktracker起不来.方面的内容,对 ...
- 【bzoj2384】[Ceoi2011]Match 特殊匹配条件的KMP+树状数组
题目描述 给出两个长度分别为n.m的序列A.B,求出B的所有长度为n的连续子序列(子串),满足:序列中第i小的数在序列的Ai位置. 输入 第一行包含两个整数n, m (2≤n≤m≤1000000). ...
- Param指南
param name标签是在这个播放插件中嵌入的一些功能和播放参数: <param name="playcount" value="1"><! ...
- 【题解】HNOI2008GT考试
这题好难啊……完全不懂矩阵加速递推的我TAT 这道题目要求我们求出不含不吉利数字的字符串总数,那么我们有dp方程 : dp[i][j](长度为 i 的字符串,最长与不吉利数字前缀相同的后缀长度为 j ...