简单使用dom4j

package com.dom4j;

import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Test1 {
    public static void main(String[] args){
        //C:/Users/Administrator.PMIMP83HWNIKWOV/Workspaces/MyEclipse 9/TestWeb/WebRoot/
        /**
         * 我使用绝对路径就会报错unknown protocol: c,不知道什么原因,现在使用的是相对路径,如果不好使用相对路径,直接使用File文件吧
         */
        //String uri="WebRoot/xml/languages.xml";
        //Document doc=praseXmlToDocument(uri);
        //System.out.println(doc.getRootElement().getName());
        //Iteratorasdom(doc);
        //navigation(doc);
        //treeWalk(doc);
        //Document doc=createDocument();
        //DocmentToFile(doc,"");
        StringToDoc();
        
    }
    
    public static Document praseXmlToDocument(String url){
        /**
         * 解析xml文件成document对象
         */
        Document document=null;
        try {
            SAXReader reader=new SAXReader();
            
            document = reader.read(url);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return document;
    }
    
    public static void Iteratorasdom(Document document){
        /**
         * document获取根元素: .getRootElement()
         * Node类型获取所有字节点的迭代器 .elementIterator()
         * 获取指定名称的所有子节点的迭代器  .elementIterator(String name)
         * 获取所有属性的迭代器 .attributeIterator()
         */
        Element root=document.getRootElement();
        /*for(Iterator i=root.elementIterator();i.hasNext();){
            Element element=(Element) i.next();
            System.out.println(element.getName());
            for(Iterator it=element.attributeIterator();it.hasNext();){
                Attribute att=(Attribute) it.next();
                System.out.println(att.getName()+"="+att.getStringValue());
            }
        }*/
        for(Iterator i=root.elementIterator("lan");i.hasNext();){
            Element element=(Element) i.next();
            for(Iterator it=element.attributeIterator();it.hasNext();){
                Attribute att=(Attribute) it.next();
                System.out.println(att.getName()+"="+att.getStringValue());
            }
        }
    }
    
    public static void navigation(Document document){
        /* 使用selectNodes需要使用jaxen.jar
         * .selectNodes("//languages/lan/name");获取所有指定名称节点的集合
         * .selectSingleNode("//languages/lan/name"); 获取第一个指定名称的节点
         * node和document对象都有这个方法
         * */
        /*List list=document.selectNodes("//languages/lan/name");
        for(int i=0;i<list.size();i++){
            Node node=(Node) list.get(i);
            System.out.println(node.getText());
        }*/
        Node node=document.selectSingleNode("//languages/lan/name");
        System.out.println(node.getText());
    }
    
    /*遍历document或者element元素的方法*/
    
    public static void treeWalk(Document document) {
            treeWalk( document.getRootElement() );
        }

     public static void treeWalk(Element element) {
            for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
                Node node = element.node(i);
                if ( node instanceof Element ) {
                    treeWalk( (Element) node );
                }
                else 
                {
                    System.out.println(node.getText());
                }
            }
    }
     
    public static Document createDocument(){
        /**
         * 添加子元素.addElement(String name)
         * 添加属性 .addAttribute(key,value)
         * 添加值 .addText(String value)
         */
        Document document=DocumentHelper.createDocument();
        Element root=document.addElement("root");
        
        Element author1=root.addElement("author")
        .addAttribute("name", "James")
        .addAttribute("location", "UK")
        .addText("James Strachan");
        
        Element author2=root.addElement("author")
        .addAttribute("name", "Bob")
        .addAttribute("location", "US")
        .addText("Bob Mchirter");
        
        return document;
    }
    
    public static void DocmentToFile(Document doc,String uri){
        /* 第一种方法,使用XMLWriter对象的writer方法*/
        XMLWriter writer = null;
        /*try {
            writer=new XMLWriter(new FileWriter(uri));
            writer.write(doc);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        
        /*
         * 输出到控制台
         * */
        OutputFormat format=OutputFormat.createPrettyPrint();
        try {
            writer=new XMLWriter(System.out,format);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            writer.write(doc);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    public static void StringToDoc(){
        /* 将docment对象转换称为xml */
        /*Document doc=createDocument();
        String text=doc.asXML();
        System.out.println(text);*/
        /* 将text对象转换称为document*/
        String text="<a><b>1</b><b>2</b><b>3</b></a>";
        try {
            Document document=DocumentHelper.parseText(text);
            treeWalk(document);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static Document a(Document doc,String stylesheet) throws IOException{
        TransformerFactory factory=TransformerFactory.newInstance();
        Transformer transformer = null;
        try {
            transformer=factory.newTransformer(new StreamSource(stylesheet));
        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        DocumentSource source=new DocumentSource(doc);
        DocumentResult result=new DocumentResult();
        try {
            transformer.transform( source, result );
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Document transformedDoc = result.getDocument();
        XMLWriter writer = null;
        
            writer=new XMLWriter(new FileWriter("doc.doc"));
            writer.write(transformedDoc);
        
        
        return transformedDoc;
    }

}
原文地址:https://www.cnblogs.com/aigeileshei/p/5505217.html