Java中DOM4J及JDOM 方式解析xml

来源:互联网 发布:淘宝产品销量排行 编辑:程序博客网 时间:2024/04/26 08:09

books.xml:

<?xml version="1.0" encoding="UTF-8"?><bookstore><book id="1"><name>冰与火之歌</name><author>乔治马丁</author><year>2014</year><price>89</price></book><book id="2"><name>安徒生童话</name><year>2004</year><price>77</price><language>English</language></book></bookstore>

Book.java

public class Book {private String id;private String name;private String author;private String year;private String price;private String language;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getYear() {return year;}public void setYear(String year) {this.year = year;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}}

JDOM

JDOMTest.java:
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;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 {private static ArrayList<Book> booksList = new ArrayList<Book>();public static void main(String[] args) {// 进行对books.xml文件的JDOM解析// 准备工作// 1.创建一个SAXBuilder的对象SAXBuilder saxBuilder = new SAXBuilder();InputStream in;try {// 2.创建一个输入流,将xml文件加载到输入流中in = new FileInputStream("src/res/books.xml");InputStreamReader isr = new InputStreamReader(in, "UTF-8");// 3.通过saxBuilder的build方法,将输入流加载到saxBuilder中Document document = saxBuilder.build(isr);// 4.通过document对象获取xml文件的根节点Element rootElement = document.getRootElement();// 5.获取根节点下的子节点的List集合List<Element> bookList = rootElement.getChildren();// 继续进行解析for (Element book : bookList) {Book bookEntity = new Book();System.out.println("======开始解析第" + (bookList.indexOf(book) + 1)+ "书======");// 解析book的属性集合List<Attribute> attrList = book.getAttributes();// //知道节点下属性名称时,获取节点值// book.getAttributeValue("id");// 遍历attrList(针对不清楚book节点下属性的名字及数量)for (Attribute attr : attrList) {// 获取属性名String attrName = attr.getName();// 获取属性值String attrValue = attr.getValue();System.out.println("属性名:" + attrName + "----属性值:"+ attrValue);if (attrName.equals("id")) {bookEntity.setId(attrValue);}}// 对book节点的子节点的节点名以及节点值的遍历List<Element> bookChilds = book.getChildren();for (Element child : bookChilds) {System.out.println("节点名:" + child.getName() + "----节点值:"+ 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("year")) {bookEntity.setYear(child.getValue());}else if (child.getName().equals("price")) {bookEntity.setPrice(child.getValue());}else if (child.getName().equals("language")) {bookEntity.setLanguage(child.getValue());}}System.out.println("======结束解析第" + (bookList.indexOf(book) + 1)+ "书======");booksList.add(bookEntity);bookEntity = null;System.out.println(booksList.size());System.out.println(booksList.get(0).getId());System.out.println(booksList.get(0).getName());}} catch (FileNotFoundException e) {e.printStackTrace();} catch (JDOMException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

DOM4J
DOM4JTest.java:
import java.io.File;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class DOM4JTest {private static ArrayList<Book> bookList = new ArrayList<Book>();/** * @param args */public static void main(String[] args) {// 解析books.xml文件// 创建SAXReader的对象readerSAXReader reader = new SAXReader();try {// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。Document document = reader.read(new File("src/res/books.xml"));// 通过document对象获取根节点bookstoreElement bookStore = document.getRootElement();// 通过element对象的elementIterator方法获取迭代器Iterator it = bookStore.elementIterator();// 遍历迭代器,获取根节点中的信息(书籍)while (it.hasNext()) {System.out.println("=====开始遍历某一本书=====");Element book = (Element) it.next();// 获取book的属性名以及 属性值List<Attribute> bookAttrs = book.attributes();for (Attribute attr : bookAttrs) {System.out.println("属性名:" + attr.getName() + "--属性值:"+ attr.getValue());}Iterator itt = book.elementIterator();while (itt.hasNext()) {Element bookChild = (Element) itt.next();System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue());}System.out.println("=====结束遍历某一本书=====");}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
阅读全文
0 0
原创粉丝点击