Dom4J的demo

Dom4J的demo

最近熟悉了一下Dom4,写了一些小代码,分为生成与解析。
一、生成xml
需要的jar包:dom4j、jaxen
输出的结果xml

<? xml version="1.0" encoding="gb2312" ?>

< SOAP-ENV:Envelope  xmlns:SOAP-ENV ="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:SOAP-ENC ="http://schemas.xmlsoap.org/soap/encoding/"  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema" >
  
<!-- Envelope Comment --> <? target text ?>

  
< SOAP-ENV:Body >
    
< m:InsertCP  xmlns:m ="http://tempuri.org/" > Hello world! </ m:InsertCP >
  
</ SOAP-ENV:Body >
</ SOAP-ENV:Envelope >


java代码

 1 package  org.xmltool.test;
 2
 3 import  java.io.FileWriter;
 4 import  java.io.IOException;
 5
 6 import  org.dom4j.Document;
 7 import  org.dom4j.DocumentHelper;
 8 import  org.dom4j.Element;
 9 import  org.dom4j.Namespace;
10 import  org.dom4j.QName;
11 import  org.dom4j.io.OutputFormat;
12 import  org.dom4j.io.XMLWriter;
13
14 public   class  Test  {
15
16    /** *//**
17     * @param args
18     * @throws IOException
19     */

20    public static void main(String[] args) throws IOException {
21
22        /**//* 创建Document */
23        Document doc = DocumentHelper.createDocument();
24
25        /**//* 创建备用Namespace */
26        Namespace SOAP_ENV_ns = new Namespace("SOAP-ENV",
27                "http://schemas.xmlsoap.org/soap/envelope/");
28        Namespace SOAP_ENC_ns = new Namespace("SOAP-ENC",
29                "http://schemas.xmlsoap.org/soap/encoding/");
30        Namespace xsi_ns = new Namespace("xsi",
31                "http://www.w3.org/2001/XMLSchema-instance");
32        Namespace xsd_ns = new Namespace("xsd",
33                "http://www.w3.org/2001/XMLSchema");
34
35        /**//* SOAP-ENV:Envelope */
36        QName envelopeQName = new QName("Envelope", SOAP_ENV_ns);/**//* 构造带名字空间头信息SOAP-ENV的节点Envelope */
37        Element envelopeElement = doc.addElement(envelopeQName);
38        envelopeElement.addComment("Envelope Comment");/**//* 添加注释 */
39        envelopeElement.addProcessingInstruction("target""text");/**//* 添加指令 */
40        /**//* 添加其它名字空间(作为属性) */
41        envelopeElement.add(SOAP_ENC_ns);
42        envelopeElement.add(xsi_ns);
43        envelopeElement.add(xsd_ns);
44
45        /**//* SOAP-ENV:Body */
46        QName bodyQName = new QName("Body", SOAP_ENV_ns);
47        Element bodyElement = DocumentHelper.createElement(bodyQName);
48        envelopeElement.add(bodyElement);
49
50        /**//* m:InsertCP */
51        Namespace m_ns = new Namespace("m""http://tempuri.org/");
52        QName insertCpQName = new QName("InsertCP", m_ns);
53        Element InsertCpElement = DocumentHelper.createElement(insertCpQName);
54        bodyElement.add(InsertCpElement);
55
56        OutputFormat format = OutputFormat.createPrettyPrint();/**//* 美化格式的输出 */
57        // OutputFormat format = OutputFormat.createCompactFormat();/*
58        // 压缩格式的输出,节省空间 */
59        format.setEncoding("gb2312");/**//* xml的编码 */
60        XMLWriter writer = new XMLWriter(new FileWriter("c:/test.xml"), format);
61        writer.write(doc);
62        writer.close();/**//* 必写无疑 */
63    }

64}

65


二、解析xml
采用了Visitor模式。通过遍历XML的各个节点,完成XML解析。

 1 package  org.xmltool.bean;
 2
 3 import  org.dom4j.Document;
 4 import  org.dom4j.DocumentException;
 5 import  org.dom4j.Element;
 6 import  org.dom4j.VisitorSupport;
 7 import  org.dom4j.io.SAXReader;
 8
 9 public   class  MyVisitor  extends  VisitorSupport  {
10    @Override
11    public void visit(Element node) {
12        System.out.println(node.getPath());
13        if ("InsertCP".equals(node.getName())) {
14            System.out.println(node.getText());
15        }

16    }

17
18    public static void main(String[] args) throws DocumentException {
19        SAXReader reader = new SAXReader();
20        Document doc = reader.read("c:/test.xml");
21        doc.accept(new MyVisitor());
22    }

23}

24

执行结果为:

/SOAP-ENV:Envelope
/SOAP-ENV:Envelope/SOAP-ENV:Body
/SOAP-ENV:Envelope/SOAP-ENV:Body/m:InsertCP
Hello world!


--------------------

    WE准高手

你可能感兴趣的:(Dom4J的demo)