简单小记:DEMO见附件
package test; import java.io.FileWriter; import java.net.URL; import java.util.Iterator; 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.XPath; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class DOM4JTest { public static void main(String[] args) throws Exception{ DOM4JTest test = new DOM4JTest(); //step 1 Document doc = test.parseDocument(new URL("file:applicationContext.xml")); //step 2-1 // test.usingIterator1(doc); //step 2-2 // test.usingIterator2(doc); //step 2-3 // test.usingIterator3(doc); //step 2-4 // test.elements(doc); //step 3-1 // test.xpath1(doc); //step 3-2 // test.xpath2(doc); //step 4 // test.treeWalker(doc.getRootElement()); //step 5 // Document d = test.create(); // test.treeWalker(d.getRootElement()); //step 6-1 // test.output1(test.create()); //step 6-2 // test.output2(test.create()); //step 6-3 // test.output3(test.create()); //step 7-1 // test.convert1(doc); //step 7-2 // test.convert2(); //step 8 test.insert(doc); } //解析document----new SAXReader().read(URL) public Document parseDocument(URL url) throws Exception{ //SAX=Simple Api for XML SAXReader reader = new SAXReader(); Document document = reader.read(url); return document; } //遍历子元素iterator------element.elementIterator public void usingIterator1(Document document){ Element root = document.getRootElement(); System.out.println(root.getName()); Iterator iterator = root.elementIterator(); while(iterator.hasNext()){ Element element = (Element)iterator.next(); //相对于根[/]的path===>return /beans/bean System.out.println(element.getPath()); //相对于参数Element元素的path System.out.println(element.getPath(root.getParent())); System.out.println(element.getName()); System.out.println("#################################"); } } //根据name-标签名遍历子元素---element.elementIterator(name) public void usingIterator2(Document document){ Element root = document.getRootElement(); //遍历name=param的所有子元素 Iterator iterator = root.elementIterator("test2"); while(iterator.hasNext()){ Element element = (Element)iterator.next(); System.out.println(element.getName()); System.out.println("#################################"); } } //遍历元素的属性---element.attributeIterator(name) public void usingIterator3(Document document){ Element root = document.getRootElement(); //遍历name=param的所有子元素 Iterator iterator = root.elements().get(0).attributeIterator(); while(iterator.hasNext()){ Attribute attribute = (Attribute)iterator.next(); System.out.println(attribute.getName()); System.out.println(attribute.getData()); System.out.println(attribute.getPath()); System.out.println(attribute.getText()); System.out.println("#################################"); } } //列表LIST遍历 public void elements(Document document){ // List elements = document.getRootElement().elements("bean"); List elements = document.getRootElement().elements(); for(Object obj : elements){ System.out.println(((Element)obj).getName()); } } //xpath的支持需要xpath库-jaxen.jar //XPATH----List list = document.selectNodes(//path) public void xpath1(Document document){ //xpath接口用法- // XPath xpathSelector = DocumentHelper.createXPath("//beans/test1"); // List list = xpathSelector.selectNodes(document); List list = document.selectNodes("//beans/test1"); for(Object obj : list){ Element element = (Element)obj; System.out.println(element.getName()); } System.out.println("#####################################################"); //xpath-属性选择 list = document.selectNodes("//beans/test1[@id!='userService1']"); for(Object obj : list){ Element element = (Element)obj; System.out.println(element.valueOf("@id")); } System.out.println("#####################################################"); //xpath-序号选择####序号从1开始 list = document.selectNodes("//beans/test1[@id!='userService1'][2]"); for(Object obj : list){ Element element = (Element)obj; System.out.println(element.valueOf("@id")); } } //XPATH----selectSingleNode|node.valueOf("@attributeName") public void xpath2(Document document){ Node node = document.selectSingleNode("//beans"); System.out.println(node.getName()); System.out.println("#####################################################"); //selectSingleNode仅选择一个Node,若有多个并列的Node,则选择第一个 node = document.selectSingleNode("//beans/bean"); System.out.println(node.valueOf("@class")); } //递归遍历 public void treeWalker(Element element){ for(int i = 0;i < element.nodeCount();i++){ Node node = element.node(i); System.out.println(node.getPath()); if(node instanceof Element){ treeWalker((Element)node); } } } //创建XML public Document create(){ //或DocumentHelper.createDocument(空)==>建立无根document,再add Element root = DocumentHelper.createElement("xmlRoot") .addAttribute("hehe", "ai"); Document document = DocumentHelper.createDocument(root); //链式!!! Element author1 = root.addElement("author") .addAttribute("name", "haimingwei") .addAttribute("age", "dead") .addAttribute("gender", "male") .addText("author1_text"); Element author2 = root.addElement("author") .addAttribute("name", "seven") .addAttribute("age", "100") .addAttribute("gender", "male") .addText("author2_text"); return document; } //output public void output1(Document document) throws Exception{ FileWriter fw = new FileWriter("dom4j_text.xml"); document.write(fw); //不close竟然输出文件中没有内容 fw.close(); } //output-format public void output2(Document document) throws Exception{ //compact紧凑格式 //OutputFormat format = OutputFormat.createCompactFormat(); //漂亮格式 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter("dom4j_text.xml"),format); writer.write(document); writer.close(); } //output-输出到console public void output3(Document document) throws Exception{ //compact紧凑格式 //OutputFormat format = OutputFormat.createCompactFormat(); //漂亮格式 OutputFormat format = OutputFormat.createPrettyPrint(); //OutputFormat可设置编码 format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(System.out,format); writer.write(document); writer.close(); } //Document===>String public void convert1(Document document){ String xmlStr = document.asXML(); System.out.println(xmlStr); } //String===>Document[DocumentHelper.parseText] public void convert2() throws Exception{ String xmlStr = "<bean id=\"dataSource\" class=\"org.springframework.jdbc.datasource.DriverManagerDataSource\">" + "<property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\"/>" + "<property name=\"url\" value=\"jdbc:mysql://localhost:3306/frame\"/>" + "<property name=\"username\" value=\"root\"/><property name=\"password\" value=\"\"/></bean>"; Document doc = DocumentHelper.parseText(xmlStr); this.output3(doc); } //insert-复制[dom4j中clone为深克隆]一个元素并插入 public void insert(Document document) throws Exception{ Element element = document.getRootElement().elements().get(0); Element newElement = (Element)element.clone(); //????content() List childList = element.getParent().elements(); childList.add(element.getParent().indexOf(element),newElement); //重新写回XML文件 - -! XMLWriter writer = new XMLWriter(new FileWriter("applicationContext.xml"),new OutputFormat().createPrettyPrint()); writer.write(document); writer.close(); } }