一、简介
Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作。它是直接为java编程服务,利用java语言的特性(方法重载,集合),把SAX和DOM的功能结合起来,尽可能的把原来解析xml变得简单,我们使用Jdom解析xml会是一件轻松的事情。
Jdom的优点:
- Jdom专用于java技术,比Dom应用占用更少内存。
- Jdom提供更加简单和逻辑性访问xml信息的基础方法
- 除xml文件外,Jdom还可以访问其他的数据源,例如可以创建类从SQL查询结果中访问数据
Jdom由6个包构成:
Element类表示XML文档的元素
- org.jdom: 解析xml文件所要用到的基础类
- org.jdom.adapters: 包含DOM适配的Java类
- org.jdom.filter: 包含xml文档的过滤类
- org.jdom.input: 包含读取XML文档的Java类
- org.jdom.output: 包含输出XML文档的类
- org.jdom.trans form: 包含将Jdom xml文档接口转换为其他XML文档接口的Java类
二、xml文件
<?xml version = "1.0" encoding = "utf-8"?>
<books>
<book id="1">
<name>冰与火之歌</name>
<author>张三</author>
<pice>99</pice>
</book>
<book id="2">
<name>葫芦娃</name>
<pice>99</pice>
<year>1993</year>
</book>
</books>
三、JDOM案例
因为jdom是第三方提供的xml解析模式,所以需要将Jdom中的包导入进来。
package com.da.xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
public class JDOMTest {
public static void main(String[] args) {
//创建SAXBuilder实例
SAXBuilder saxBuilder = new SAXBuilder();
InputStream io = null;
try {
//创建一个输入流,将xml文件加载到输入流中
FileInputStream in = new FileInputStream("books.xml");
//通过saxBuilder中的build方法,将输入流加载到saxBuilder
Document build = saxBuilder.build(in);
//通过Document对象获取xml文件的根节点
Element rootElement = build.getRootElement();
//获取根节点下的子节点的List集合
List<Element> booklist = rootElement.getChildren();
for (Element book : booklist) {
System.out.println("解析第"+(booklist.indexOf(book)+1)+"本书");
//不知道属性名的情况下进行遍历
List<Attribute> attributes = book.getAttributes();
for (Attribute attr : attributes) {
System.out.println("属性名:"+attr.getName()+":"+attr.getValue());
}
//知道属性名下参数的个数直接进行获取。
// String attributeValue = book.getAttributeValue("id");
// System.out.println(attributeValue);
//遍历book子节点的节点名与节点值
List<Element> children = book.getChildren();
for (Element element : children) {
System.out.println("节点:"+element.getName()+":"+element.getValue());
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结果
解析第1本书
属性名:id:1
节点:name:冰与火之歌
节点:author:张三
节点:pice:99
解析第2本书
属性名:id:2
节点:name:葫芦娃
节点:pice:99
节点:year:1993
四、扩展
使用 JDOM 解析将 XML 的内容和结构存入 JAVA 对象
给xml进行转码InputStreamReader str= new InputStreamReader(io, "utf-8");