Java特定的文档对象模型。自身不包含解析器,使用SAX。
优点:
1、使用具体类而不是接口,简化了DOM的API。
2、大量使用了Java集合类,方便了Java开发人员。
缺点:
1、没有较好的灵活性。
2、性能较差。
导入相关jar jdom-2.0.5-contrib.jar
jdom-2.0.5-javadoc.jar
jdom-2.0.5-junit.jar
jdom-2.0.5.jar
一创建项目
1.创建类book
package com.jdomxml;
public class Book {
private String id;
private String name;
private String author;
private String price;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.开始解析xml,并把解析的xml文件的节点保存到book对象
package com.jdomxml;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class JdomXmlTest {
private static ArrayList<Book> bookList = new ArrayList<>();
public static void main(String[] args) {
//进行对book.xml文件进行JDOM解析
//1.创建一个SAXBuilder的对象
SAXBuilder saxBuilder = new SAXBuilder();
try {
//2.创建一个输入流,将xml文件加载到输入流中
InputStream in = new FileInputStream("book.xml");
//3.通过saxBuilder的builder方法将book.xml加载到SAXBuilder
Document document = saxBuilder.build(in);
//4.通过document对象获取xml的根节点
Element rootElement = document.getRootElement();
//5.获取根节点下的子节点的list集合
List<Element> rootList = rootElement.getChildren();
//继续进行解析
for (Element element : rootList) {
// Attribute id = element.getAttribute("id");
// System.out.println(id.getName()+"========"+id.getValue());
Book bookEntity = new Book();
//解析book的属性
List<Attribute> attrList = element.getAttributes();
//遍历Attribute(主要针对于在不知道book节点的属性名与属性值)
for (Attribute attribute : attrList) {
//获取属性名
String name = attribute.getName();
System.out.print("people属性名:"+name+"\t");
//获取属性值
String value = attribute.getValue();
System.out.println("属性值:"+value);
if (name.equals("id")) {
bookEntity.setId(value);
}
}
//对book节点下的子节点下的节点名与节点值进行遍历
List<Element> children = element.getChildren();
for (Element child : children) {
//子节点的节点名与节点值
System.out.println("属性名:"+child.getName()+"\t"+"属性值:"+child.getValue());
if (child.getName().equals("name")) {
bookEntity.setName(child.getValue());
} else if (child.getName().equals("author")) {
bookEntity.setAuthor(child.getValue());
}else if (child.getName().equals("price")) {
bookEntity.setPrice(child.getValue());
}
}
bookList.add(bookEntity);
System.out.println(bookList.size());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Jdom常用方法:
1:SAXBuilder.build(FileInputStream("*.xml");获取xml文件,返回Document实例(读xml文件)
2:Element.getChildren();获取该节点的所有字节点,返回List
3:Element.getChild("child节点名");获取字节点实例
4:Element.getAttribute("属性名");获取该节点属性的value值(平面式节点)
5:Element.getText();获取该节点的节点文本
6:Document(new Element("根节点名"));新建xml文件文档
7:Document.getRootNote();获取根节点
8:Element.addContent(Element);添加子节点
9:Element.setAttribute("属性名","属性值");添加节点属性
10:Element.setText("文本值");添加该节点的文本值
11:xmloutPutter(Format.getPrettyFormat());设置XML文档输出的格式
12:xmlOutPutter.output(Document,FileOutPutStream);这两句用来输出xml文件,其中Document为填好内容的xml文档对象,FileoutPutStream为文本输出流