概述
JDOM是一种非官方解析XML的java工具包,是java基础解析方式的一种扩展。利用java语言的特性,将DOM和SAX的功能有效的结合起来。因此,JDOM可以看做是用java语言读、写、操作XML的新API函数。
在JDOM中,XML元素就是Element实例,XML属性就是Attribute的实例,XML文档本身就是Document的实例。
JDOM的特点:
1. 仅使用具体类而不使用接口,API大量使用了Java集合类。
2. JDOM自身不包含解析器,使用SAX解析器生成 JDOM Document
示例
JDOM是一种java工具包,使用时需要导包,这里使用jdom-2.0.5.jar
XML文件
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>java编程思想</name>
<author>Bruce Eckel</author>
<year>2015</year>
<price>79</price>
</book>
<book id="2">
<name>深入理解java虚拟机</name>
<author>周志明</author>
<price>40</price>
</book>
</bookstore>
创建JDOMXMLTest类
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 JDOMXMLTest {
/**
* @param args
* JDOM方式解析XML
*/
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
//1.创建SaxBuilder对象
SAXBuilder saxBuilder=new SAXBuilder();
InputStream in;
try {
//2.创建一个输入流,将xml文件加载到输入流中
in = new FileInputStream("src/res/book.xml");
//3.通过saxBuilder的build方法,将输入流加载到saxBuilder中 返回一个doucument对象
Document document = saxBuilder.build(in);
//通过document对象获取根结点
Element rootElement=document.getRootElement();
//获取根结点下的子结点
List<Element> bookList = rootElement.getChildren();
//遍历解析
for(Element book :bookList){
System.out.println("=============开始遍历第"+(bookList.indexOf(book)+1)+"本书=============");
//解析book的属性
List<Attribute> attrList=book.getAttributes();
for(Attribute attr:attrList){
String attrName = attr.getName();//获取属性值
String attrValue = attr.getValue();//获取实际值的文本
System.out.println("属性名: "+attrName+"---属性值:"+attrValue);
}
//对book节点的子结点的节点名和节点值
List<Element> bookChilds = book.getChildren();
for(Element child: bookChilds){
System.out.println("节点名:"+child.getName()+"--节点值:"+child.getValue());
}
System.out.println("=============结束遍历第"+(bookList.indexOf(book)+1)+"本书=============");
}
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}