Jdom解析多层xml文件
一、Jdom简介:
JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。
JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。
在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。
JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用当中的不足之处。
这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能,而对于DOM来说,JAVA程序员在使用时来用起来总觉得不太方便。
JDOM作为一种轻量级API被制定,它最核心的要求是以Java为中心,只适合于Java语言,它遵循DOM的接口主要规则,除去了DOM中为了兼容各语言而与Java习惯的不同。
DOM的缺点主要是来自于由于Dom是一个接口定义语言(IDL),它的任务是在不同语言实现中的一个最低的通用标准,并不是为JAVA特别设计的。JDOM的最新版本为JDOM Beta 9。最近JDOM被收录到JSR-102内,这标志着JDOM成为了JAVA平台组成的一部分。
二、jdom使用前提条件
导入jdom.jar包。
JDOM是由以下几个包组成的
org.jdom 包含了所有的xml文档要素的java类
org.jdom.adapters 包含了与dom适配的java类
org.jdom.filter 包含了xml文档的过滤器类
org.jdom.input 包含了读取xml文档的类
org.jdom.output 包含了写入xml文档的类
org.jdom.transform 包含了将jdom xml文档接口转换为其他xml文档接口
org.jdom.xpath 包含了对xml文档xpath操作的类
三、实例讲解
<?xml version="1.0" encoding="UTF-8" ?>
<requestPkg>
<header>
<id>1001</id>
<name>szghrs</name>
</header>
<dataset>
<data>
<age>xxxxxxxxxxx</age>
<birthday>xxxxxx</ birthday >
<address>xxxxxxx</address>
</data>
</dataset>
<time>2015-06-08 09:45:52</time>
</requestPkg>
//创建一个新的字符串
StringReader read = new StringReader(queryXml);
//创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
//创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
//通过输入源构造一个Document
Document doc = sb.build(source);
//取的根元素
Element requestPkg = doc.getRootElement();
//得到根元素所有子元素的集合
List<?> header_dataset = requestPkg.getChildren();
Map<String,String> maps = new HashMap<String, String>();
for (int i = 0; i < header_dataset.size(); i++) {
Element ehd = (Element) header_dataset.get(i);
List<?> headerChild = ehd.getChildren();
// 遍历header标签里的所有内容
for (int j = 0; j < headerChild.size(); j++) {
Element e = (Element) headerChild.get(j);
//遍历data中内容
if("data".equals(e.getName())){
List<?> DateChild = e.getChildren();
for (int k = 0; k < DateChild.size(); k++) {
Element ei = (Element) DateChild.get(k);
maps.put(ei.getName(),ei.getText());
System.out.println("name = " + ei.getName() + ", value = " + ei.getText());
}
}else{
maps.put(e.getName(),e.getText());
}
}
}
如果再有多层嵌套,在data循环中嵌套遍历。
部分内容转自百度百科。
转载请标明出处!!!!!