zoukankan      html  css  js  c++  java
  • 使用dom4j创建和解析xml文件

    使用dom4j创建和解析xml文件

      在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j。

    下面我就以代码来讲解一下如何使用dom4j来创建xml文件。

    1.项目结构

    在这里我们要,引入dom4j中的两个jar包,分别是:

    dom4j-1.6.1;

    jaxen-1.1-beta-6;

    2.简要介绍

      >创建xml 的主要类 DocumentHelper
      document = DocumentHelper.createDocument();


      >写入文件的主要类XMLWriter
      >格式化xml的辅助类OutputFormat
      OutputFormat format = OutputFormat.createPrettyPrint();
      writer = new XMLWriter(new FileWriter(filepath), format);

      >格式化输出 OutputFormat  相应的还有createCompactFormat() 创建压缩的xml文件,删去了所有的换行等无用的字符。createPrettyPrint() 则是生成格式化的xml 代码,让看起来好读一点。

    3.实例

    下面以代码来详细讲解,注释很清楚。

    代码清单【1】XmlUtils.java

      1 package com.lxf.xmlUtils;
      2 
      3 import java.io.File;
      4 import java.io.FileNotFoundException;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.io.InputStream;
      8 import java.io.OutputStreamWriter;
      9 import java.util.List;
     10 import java.util.Properties;
     11 import java.util.UUID;
     12 
     13 import org.dom4j.Attribute;
     14 import org.dom4j.Document;
     15 import org.dom4j.DocumentException;
     16 import org.dom4j.DocumentHelper;
     17 import org.dom4j.Element;
     18 import org.dom4j.io.OutputFormat;
     19 import org.dom4j.io.SAXReader;
     20 import org.dom4j.io.XMLWriter;
     21 
     22 
     23 /**
     24  * 使用dom4j生成和解析xml文件
     25  * @author Administrator
     26  *2016/12/05
     27  */
     28 public class XmlUtils
     29 {
     30     private static final XmlUtils INSTANCE = new XmlUtils();
     31     
     32     private static final String UU_STRING = UUID.randomUUID().toString().substring(0, 5);
     33     private static final String FILEBASEPATH = getPropertiesInfo("filepath") +"\"+ UU_STRING + ".xml" ;
     34     
     35     public static XmlUtils getInstance()
     36     {
     37         return INSTANCE;
     38     }
     39     
     40     
     41     /**
     42      * 1.使用dom4j创建xml文档对象
     43      */
     44     public static Document createDocument()
     45     {
     46         /*
     47          * 1.使用DocumentHelper创建文档对象.
     48          */
     49         Document document = DocumentHelper.createDocument();
     50         /*
     51          * 2.创建根节点
     52          */
     53         Element root = DocumentHelper.createElement("message");
     54         document.setRootElement(root);
     55         /*
     56          * 3.为根节点设置一级节点
     57          */
     58         Element element1 = root.addElement("name");
     59         element1.setText("java");
     60         
     61         Element element2 = root.addElement("age");
     62         element2.setText("23");
     63         /*
     64          * 为一级节点设置子节点
     65          */
     66         Element element3 = root.addElement("address");
     67         Element element31 = element3.addElement("id");
     68         element31.setText("1");
     69         Element element32 = element3.addElement("province");
     70         element32.setText("北京市");
     71         Element element33 = element3.addElement("street");
     72         element33.setText("长安街");
     73         /*
     74          *4.为节点设置属性 
     75          */
     76         root.setAttributeValue("version", "2.0");
     77         element1.setAttributeValue("kind", "book");
     78         
     79         return document;
     80         
     81     }
     82     
     83     /**
     84      * 2.使用dom4j创建输出xml文件
     85      */
     86     public static void createXml()
     87     {
     88         /*
     89          * 1.创建文档对象
     90          */
     91         Document document = createDocument();
     92         //生成的xml文件存放路径
     93         String filePath =FILEBASEPATH;
     94         File file = new File(filePath);
     95         
     96         OutputStreamWriter osw = null;
     97         try 
     98         {
     99             osw = new OutputStreamWriter(new FileOutputStream(file));
    100             /*
    101              * 2.设置xml文档的输出格式为缩进
    102              */
    103             OutputFormat format = OutputFormat.createPrettyPrint();
    104             /*
    105              *3.设置输出文档的编码为UTF-8 
    106              */
    107             format.setEncoding("UTF-8");
    108             XMLWriter out = new XMLWriter(osw, format);
    109             /*
    110              * 4.输出xml文档
    111              */
    112             out.write(document);
    113             
    114         } 
    115         catch (FileNotFoundException e) 
    116         {
    117             e.printStackTrace();
    118         }
    119         catch (IOException e) 
    120         {
    121             e.printStackTrace();
    122         }
    123         finally
    124         {
    125             //关闭输出流
    126             if(null != osw )
    127             {
    128                 try 
    129                 {
    130                     osw.close();
    131                 } 
    132                 catch (IOException e) 
    133                 {
    134                     e.printStackTrace();
    135                 }
    136             }
    137         }
    138     }
    139     
    140     /**
    141      * 3.使用dom4j解析xml文件
    142      */
    143     public static void analyzeXml()
    144     {
    145         //生成的xml文件存放路径
    146         String filePath =FILEBASEPATH;
    147         File file = new File(filePath);
    148         /*
    149          * 1.使用SAXReader创建Document文档对象
    150          */
    151         SAXReader reader = new SAXReader();
    152         try 
    153         {
    154             Document document = reader.read(file);
    155             /*
    156              * 2.获取xml文件的根节点
    157              */
    158             Element root = document.getRootElement();
    159             /*
    160              * 3.获取子节点和属性
    161              */
    162             iteratorCherk(root);
    163         } 
    164         catch (DocumentException e)
    165         {
    166             e.printStackTrace();
    167         }
    168         
    169     }
    170     
    171     /**
    172      * 4.获取节点名,节点属性
    173      */
    174     public static void iteratorCherk(Element element)
    175     {
    176         List<Element> elements = element.elements();
    177         for(Element e : elements)
    178         {
    179             List<Attribute> attributeList = e.attributes();
    180             String name = e.getName();
    181             String text = e.getTextTrim();
    182             if(text.length()==0)
    183             {
    184                 System.out.println(name+":");
    185             }else
    186             {
    187                 System.out.println(name+"="+ text);
    188             }
    189             for(Attribute att : attributeList)
    190             {
    191                 String aname = att.getName();
    192                 String atext = att.getText();
    193                 System.out.println(aname +"="+ atext);
    194             }
    195             iteratorCherk(e);
    196         }
    197         
    198     }
    199 
    200     /**
    201      * 5.获取配置文件的配置信息
    202      * @return 
    203      */
    204     public static String getPropertiesInfo(String string)
    205     {
    206         InputStream inputStream = XmlUtils.class.getClassLoader().getResourceAsStream("config.properties");
    207         Properties p = new Properties();
    208         try
    209         {
    210             p.load(inputStream);
    211         }
    212         catch (IOException e) 
    213         {
    214             e.printStackTrace();
    215         }
    216         return p.getProperty(string);
    217     }
    218 }

    使用JUnit测试,代码清单【2】XmlTest.java

     1 package demo;
     2 
     3 import org.junit.Test;
     4 
     5 import com.lxf.xmlUtils.XmlUtils;
     6 
     7 /**
     8  * xml工具类测试
     9  * @author Administrator
    10  *
    11  */
    12 public class XmlTest
    13 {
    14     /**
    15      * 创建xml文件测试
    16      */
    17     @Test
    18     public void createXmlTest()
    19     {
    20         XmlUtils.getInstance().createXml();
    21     }
    22     
    23     /**
    24      * 解析xml文件测试
    25      */
    26     @Test
    27     public void analyzeXmlTest()
    28     {
    29         XmlUtils.getInstance().analyzeXml();
    30     }
    31 
    32 }

    4.拓展和后期补充

      可以看到,我在项目中配置了一个.properties文件,大家可以在为xml文件增加节点和给节点赋值的时候,

    读取配置文件的内容(.properties文件的内容结构是key=value).关于读取配置文件可以参照我的上一篇总结(java读取properties配置文件总结).

    未来两天,我还会进行javaBean与Xml文件相互转换的总结,目前的想法是:

    (1)使用目前掌握的dom4j知识;

    (2)使用JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。

           使用Marshaller接口,将Java对象序列化为XML数据;

        使用Unmarshaller接口,将XML数据反序列化为Java对象。

  • 相关阅读:
    重构二叉树
    Nlog、elasticsearch、Kibana以及logstash
    技术
    Java 的垃圾回收机制(转)
    Java并发编程:并发容器之CopyOnWriteArrayList
    深入理解Arrays.sort() (转)
    浅析java的浅拷贝和深拷贝
    gradle
    @action 注解
    如何使用mysql
  • 原文地址:https://www.cnblogs.com/lthIU/p/6135871.html
Copyright © 2011-2022 走看看