XML解析( Dom4j 详解)

来源:互联网 发布:万能票据打印软件 编辑:程序博客网 时间:2024/05/23 23:39


Dom4j与JDOM 一样,也是开源代码的java库。
Dom4j同时也是使用SAX解析器来分析xml文档,要创建dom4j树,Dom4j可以接收

Dom格式的内容,并提供从dom4j树到SAX的事件流或W3CDOM树的输出机制。

不同的是dom4j自带了一个SAX解析器,如果没有显示的设置SAX解析器,也可以

通过系统属性设置解析器。

创建一个xml文档:
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Dom4jTest1
{
public static void main(String[] args) throws IOException
{//创建文档
    Document document = DocumentHelper.createDocument();
    //创建一个根元素
    Element root = DocumentHelper.createElement("student");
    //给文档添加根元素
    document.setRootElement(root);
    //给根元素添加属性
    root.addAttribute("name","zhangsan");
    //添加子元素
    Element helloElement = root.addElement("hello");
    
    Element worldElement = root.addElement("world");
    //设置子元素文本内容
    helloElement.setText("hello");
    
    worldElement.setText("world");
    
    helloElement.addAttribute("age","20");
    //输出(文本形式)
    XMLWriter xmlWriter = new XMLWriter();
    
    xmlWriter.write(document);
    //输出的格式
    OutputFormat format = new OutputFormat("   ",true );
    
    XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream

("student2.xml"),format);
    
    xmlWriter2.write(document);
    
    XMLWriter xmlWriter3 = new XMLWriter(new FileWriter

("student3.xml"),format);
    
    xmlWriter3.write(document);
    
    xmlWriter.close();
    
    
}
}

解析一个XML文档:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

public class Dom4jTest2
{
public static void main(String[] args) throws DocumentException,

SAXException, IOException, ParserConfigurationException
{//创建一个解析器
    SAXReader saxReader = new SAXReader();
    //解析一个具体的文档
    Document doc = saxReader.read(new File("student2.xml"));
    //得到文档的根元素
    Element root = doc.getRootElement();
    
    System.out.println("root element:"+root.getName());
    //输出文档中的所有节点
    List childList = root.elements();
    
    System.out.println(childList.size());
    
    List childList2 = root.elements("hello");
    
    System.out.println(childList2.size());
    
    Element first = root.element("hello");
    
    System.out.println(first.attributeValue("age"));
    //遍历节点的属性
    for(Iterator iter= root.elementIterator();iter.hasNext();)
    {
        Element e = (Element)iter.next();
        
        System.out.println(e.attributeValue("age"));
        
    }
    System.out.println("----------------");
    
    DocumentBuilderFactory dbf =

DocumentBuilderFactory.newInstance();
    
    DocumentBuilder db =  dbf.newDocumentBuilder();
    
    org.w3c.dom.Document document = ((DocumentBuilder) db).parse

(new File("student2.xml"));
    
    DOMReader domReader = new DOMReader();
    //将JAXP的Document转换为dom4j的Document
    Document d = domReader.read(document);
    
    Element rootElement = d.getRootElement();
    
    System.out.println(rootElement.getName());
    
}
}