Dom4j解析XML

package com.to.go.dom4jparse;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jClass {
    

    /**
     * 遍历 递归
     */
    
    public static void it(Element r) {
        
        //获取 传入的节点对象的属性
        List<Attribute> attributes = r.attributes();
        
        for (Attribute att : attributes) {
            //遍历属性
            System.out.println(att.getName()+"==>"+att.getStringValue());
        }
        
        //遍历 传入节点 的 文本节点
        String textTrim = r.getTextTrim();
        if(textTrim.length() > 0 ) {
            System.out.println(r.getName()  +  "----->"  +  textTrim);
        }
        
        //传入 的是 根节点 根节点 如果 没有属性 和 文本 节点 以上就不输出
        //在一次 获取根节点 的子元素 对子元素进行递归遍历  重复执行上面方法进行 属性和文本节点输出

        List<Element> elements = r.elements();
        
        for (Element e : elements) {
            //递归
            it(e);
        }    
    }
    public static void main(String[] args) throws DocumentException, IOException {
        //1 创建SAXReader 
        SAXReader reader = new SAXReader();
        Document doc = reader.read("src\\main\\java\\com\\to\\go\\dom4jparse\\student.xml");
        //2.获取根元素
        Element root = doc.getRootElement();
        
        //调用 递归遍历xml 文档
        it(root);

    }
    
    
    

    /**
     * 遍历整个XML文档元素
     * @param args
     * @throws DocumentException
     * @throws IOException 
     */
    public static void main3(String[] args) throws DocumentException, IOException {
        //1 创建SAXReader 
        SAXReader reader = new SAXReader();
        Document doc = reader.read("src\\main\\java\\com\\to\\go\\dom4jparse\\student.xml");
        //2.获取根元素
        Element root = doc.getRootElement();
        
            // 遍历根的子元素
        for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
            Element element = it.next();
            System.out.println(element.asXML());
        }
        System.out.println("-----------------------------");
        
        // 遍历  兴奋剂   的子元素
        for (Iterator<Element> it = root.elementIterator("兴奋剂"); it.hasNext();) {
        Element foo = it.next();
            System.out.println(foo.asXML());
        }
        
    }
    
    
    
    
    
    
    
    
    
    
    
    /**
     * 添加元素
     * @param args
     * @throws DocumentException
     * @throws IOException 
     */
    public static void main2(String[] args) throws DocumentException, IOException {
        //1 创建SAXReader 
        SAXReader reader = new SAXReader();
        Document doc = reader.read("src\\main\\java\\com\\to\\go\\dom4jparse\\student.xml");
        //2.获取根元素
        Element r = doc.getRootElement();
        
        //3.向根节点下注入 新节点 
        
        Element xfj = r.addElement("兴奋剂").addAttribute("xfj", "xfj_001");
        
        //添加元素和 文本节点
        xfj.addElement("name").setText("咖啡因类");
        xfj.addElement("price").setText("100$");
        xfj.addElement("number").setText("9527");
        
        //格式化输出到XML文件中
        OutputFormat f = OutputFormat.createPrettyPrint();
        
        //字符输出流包装 文件输出流
        OutputStreamWriter wr = new OutputStreamWriter(
                new FileOutputStream(//指定文件编码 utf8
                        "src\\main\\java\\com\\to\\go\\dom4jparse\\student.xml"),"Utf8");
        
        //创建一个XMl字符输出流对象
        XMLWriter xml = new XMLWriter(wr,f);
        
        //开始写
        xml.write(doc);
        
        //关流
        wr.close();
        xml.close();
    }
    
    
    
    
    
    
    
    
    
    

    /**
     * 获取所有指定标签的内容
     * @param args
     * @throws DocumentException
     */
    public static void main1(String[] args) throws DocumentException {
        //1 创建SAXReader 
        SAXReader reader = new SAXReader();
        Document doc = reader.read("src\\main\\java\\com\\to\\go\\dom4jparse\\student.xml");
        //2.获取根元素
        Element r = doc.getRootElement();
        
        //3.根据 名称获取根元素下指定 标签  student   的元素集合
        List<Element> sList = r.elements("student");
        //4.遍历每一个子元素
        for (Element e : sList) {
            //获取指定 元素 的文本  值
            //String elementName = e.elementText("name");
            
            //获取 name元素的  文本值
            System.out.println(e.elementText("name"));
            System.out.println(e.elementText("age"));
            //获取属性的值
            System.out.println(e.attributeValue("number"));
            
            System.out.println("--------------------------");
        }
    }
}

 

posted @ 2018-05-30 22:53  马鞍山  阅读(96)  评论(0编辑  收藏  举报