JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J。
- Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
- Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
- 使用Dom4j开发,需下载dom4j相应的jar文件。
- Dom4j的使用可参见其所提供的文档(quick start)
DOM4J需要加入两个包:dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar
参考下载地址:http://pan.baidu.com/s/1eS3X3DS
完整代码:
package package1112; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.IllegalAddException; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class third { private static void find() throws DocumentException { //解析xml文档 SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查 Element root = document.getRootElement(); List<Element> list =root.elements(); List<Element> list1 = list.get(1).elements(); System.out.println(list1.get(1).getText()); //输出特定节点特定属性的属性值 Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0); System.out.println(e.attributeValue("title")); } /**创建子节点 * @throws DocumentException * @throws IllegalAddException * @throws IOException */ private static void addElement() throws DocumentException,IllegalAddException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // 使用工具类DocumentHelper创建结点 Element e = DocumentHelper.createElement("languge"); e.setText("Chinese"); e.addAttribute("bb", "boy"); // 寻找父节点 Element ee = (Element) document.selectNodes("//book").get(1); // 添加结点至内存文档 ee.add(e); // Writing a document to a file,可以参考dom4j的API XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml")); writer.write(document); writer.close(); } /**删除子节点 * @throws DocumentException * @throws IOException */ private static void deleteElement() throws DocumentException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // 读取待删除结点的父节点 Element e = (Element) document.selectNodes("//languge").get(0); // 移除结点(内存) e.getParent().remove(e); // Writing a document to a file,可以参考dom4j的API XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml")); writer.write(document); writer.close(); } public static void main(String[] args) throws DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); } }
代码解析:
总体:三个功能函数,一个主函数
功能函数1:find()
两种方式(传统方式,Xpath方式)输出特定节点的文本内容
输出特定的属性值
传统方式:
private static void find() throws DocumentException { //解析xml文档 SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // Xpath解析模式 Element e = (Element) document.selectNodes("//title").get(1); System.out.println(e.getText()); }
Xpath方式:
private static void find() throws DocumentException { //解析xml文档 SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查 Element root = document.getRootElement(); List<Element> list =root.elements(); List<Element> list1 = list.get(1).elements(); System.out.println(list1.get(1).getText()); //输出特定节点特定属性的属性值 Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0); System.out.println(e.attributeValue("title")); }
功能函数二: addElement()
创建新节点
private static void addElement() throws DocumentException,IllegalAddException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // 使用工具类DocumentHelper创建结点 Element e = DocumentHelper.createElement("languge"); e.setText("Chinese"); e.addAttribute("bb", "boy"); // 寻找父节点 Element ee = (Element) document.selectNodes("//book").get(1); // 添加结点至内存文档 ee.add(e); // Writing a document to a file,可以参考dom4j的API XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml")); writer.write(document); writer.close(); }
功能函数三:deleteElement()
删除节点
private static void deleteElement() throws DocumentException, IOException { SAXReader reader = new SAXReader(); Document document = reader.read(new File("WebRoot/xml/t6.xml")); // 读取待删除结点的父节点 Element e = (Element) document.selectNodes("//languge").get(0); // 移除结点(内存) e.getParent().remove(e); // Writing a document to a file,可以参考dom4j的API XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml")); writer.write(document); writer.close(); }