解析XML-Dom4j

来源:互联网 发布:matlab迭代算法程序 编辑:程序博客网 时间:2024/05/23 16:49

参考视频,用Dom4j实现对XML文件的查,填,删,改,保存等操作

package lzh.xml.dom4j;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/** * 需要用到第三方包"dom4j-1.6.1.jar",这是一个基础包 * 当需要用到XPATH路径查询时,要用到"jaxen-1.1-beta-6.jar" *  *//** * 用Dom4j来对XML文件进行增删改查操作 *  * @author lzh * */public class Dom4jCRUD {public static void main(String[] args) throws Exception {// step1: 创建操作流SAXReader reader = new SAXReader();// step2: 解析指定的xml文档,获得documentDocument document = reader.read("books.xml");// step3: 创建集合来存放book对象List<Book> allBook = new ArrayList<Book>();//查询,显示SelectXml(document, allBook);//增加操作Dom4jCreateXml(document);//删除操作// Dom4jDeleteXml(document);//更新操作// Dom4jUpdateXml(document);//保存操作Dom4jSaveXml(document);}private static void SelectXml(Document document, List<Book> allBook) {// 获得根元素Element rootElement = document.getRootElement();// 获得所有书籍,存放在集合中List<Book> list = rootElement.elements();// 遍历所有的书籍 --listfor (int i = 0; i < list.size(); i++) {// 创建book对象,来存放取出的book内容Book book = new Book();// 获得每一本book元素Element bookElement = (Element) list.get(i);// System.out.println(bookElement);// 获得书籍的id属性值String id = bookElement.attributeValue("id");// System.out.println(id);book.setId(id);// 获得title和price元素List<Book> childList = bookElement.elements();for (int c = 0; c < childList.size(); c++) {Element child = (Element) childList.get(c);// System.out.println(child);// 获得文本内容String content = child.getText();// System.out.println(content);// 判断是否为titleif ("title".equals(child.getName())) {book.setTitle(content);}if ("price".equals(child.getName())) {book.setPrice(content);}}// 将已经封装了内容的book对象,添加到list中allBook.add(book);}// System.out.println(document);System.out.println(allBook);}private static void Dom4jCreateXml(Document document) {// 在根元素下添加,先查到根元素Element rootElement = document.getRootElement();// 添加// 1.先创建出要添加的元素Element newbook = DocumentHelper.createElement("book");// 创建book元素的id属性Attribute idAttr = DocumentHelper.createAttribute(newbook, "id", "b003");// 将新建的属性添加到元素下newbook.add(idAttr);// 创建book元素的子元素title priceElement titleElement = DocumentHelper.createElement("title");Element priceElement = DocumentHelper.createElement("price");// 设置相应的值titleElement.setText("20161030");priceElement.setText("22:00");// 添加到book元素下newbook.add(titleElement);newbook.add(priceElement);// 将新元素添加到root元素下rootElement.add(newbook);}private static void Dom4jDeleteXml(Document document) {// 删除b002// 查找到指定的元素Node bookNode = document.selectSingleNode("//book[@id='b002']");// 获得父节点Element parentElement = bookNode.getParent();// 删除操作parentElement.remove(bookNode);}private static void Dom4jSaveXml(Document document)throws FileNotFoundException, UnsupportedEncodingException, IOException {// 保存,也就是另存,持久化等// 创建输出文件的位置FileOutputStream out = new FileOutputStream("books.dom4j.xml");// 创建输出流XMLWriter writer = new XMLWriter(out);// 输出文件writer.write(document);// 流操作,必须关闭writer.close();}private static void Dom4jUpdateXml(Document document) {// 修改 b002 price -->100// 利用XPATH快速查找到指定目标Node bookNode = document.selectSingleNode("//book[@id='b002']");// 按要求进行强转Element bookElement = (Element) bookNode;// 通过指定的名称获得相应的元素Element priceElement = bookElement.element("price");// priceElement.getText();priceElement.setText("100");}}class Book {String id;String title;String price;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}@Overridepublic String toString() {return "Book [id=" + id + ", title=" + title + ", price=" + price + "]";}}


0 0
原创粉丝点击