Dom4j解析XML
Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j.
使用Dom4j开发,需下载dom4j相应的jar文件。
DOM4j中,获得Document对象的方式有三种:
1.读取XML文件,获得document对象
SAXReaderreader = new SAXReader();
Document document =
reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document=
DocumentHelper.parseText(text);
3.主动创建document对象.
Document
document= DocumentHelper.createDocument();
//创建根节点
Element root = document.addElement("members");
XML文档 book.xml:
<?xml version="1.0" encoding="UTF-8"?> <书架> <书 name="工具书"> <书名>Java就业培训教程</书名> <售价>19元</售价> <作者>张孝祥</作者> <售价>209元</售价> <售价>19元</售价> </书> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> </书架>
解析类Dom4jXml.java
import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class Dom4jXml { // 读取xml中元素属性值 @Test public void read() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book1.xml"); Element root = document.getRootElement(); Element bookname = root.element("书").element("书名"); System.out.println(bookname.getText()); } // 向xml文档中添加<售价>19元</售价> @Test public void add() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book1.xml"); Element price = DocumentHelper.createElement("售价");// DocumentHelper // dom4j中创建标签的类 price.setText("29元"); document.getRootElement().element("书").add(price); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml")); writer.write(document); writer.close(); } // 将xml文档中的<售价>29元</售价> 更新为<售价>39元</售价> @Test public void update() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book1.xml"); Element price = (Element) document.getRootElement().element("书") .elements("售价").get(0);//通过elements得到多个售价元素,使用get(i)方法得到要更新的节点 price.setText("39元"); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml")); writer.write(document); writer.close(); } //删除xml指定元素属性 @Test public void delete() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("src/book1.xml"); Element price = (Element) document.getRootElement().element("书") .elements("售价").get(0); price.getParent().remove(price); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml")); writer.write(document); writer.close(); } //向指定位置添加元素 @SuppressWarnings("unchecked") @Test public void adddir() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("src/book1.xml"); Element price =DocumentHelper.createElement("售价"); price.setText("45元"); List list =document.getRootElement().element("书").elements();//用list得到<书>节点下所有元素 list.add(2,price);//通过list.add(item,element)指定位置添加元素 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml")); writer.write(document); writer.close(); } }