zoukankan      html  css  js  c++  java
  • XML解析之DOM4J

    DOM4J解析XML文档:
    █ Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
    █ Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
    █ 使用Dom4j开发,需下载dom4j相应的jar文件。


    Document对象: 节点对象:
    DOM4j中,获得Document对象的方式有三种:
            1.读取XML文件,获得document对象            
               SAXReader reader = new SAXReader();
               Document document = reader.read(url);
            2.解析XML形式的文本,得到document对象.
               String text = "<members></members>";              
               Document document = DocumentHelper.parseText(text);
            3.主动创建document对象.
                Document document = DocumentHelper.createDocument();             //创建根节点
                Element root = document.addElement("members");
    1.获取文档的根节点.
            Element root = document.getRootElement();

    2.取得某个节点的子节点.
            Element element=node.element(“书名");
            element.element("售价");

    3.取得节点的文字
            String text=node.getText();

    节点对象: 节点对象属性 
    4.取得某节点下所有名为“member”的子节点,并打印出来。
        List nodes = rootElm.elements("member");  

    5.在某节点下添加子节点。
       Element ageElm = newMemberElm.addElement("age");

    6.设置节点文字。
        element.setText("29");

    7.删除某节点。 //childElm是待删除的节点,parentElm是其父节点
        parentElm.remove(childElm);

    8.添加一个CDATA节点。
    Element contentElm = infoElm.addElement("content"); contentElm.addCDATA(diary.getContent());

    1.取得某节点下的某属性    
         Element root=document.getRootElement();        //属性名name
         Attribute attribute=root.attribute("size");

    2.取得属性的文字    
         String text=attribute.getText();

    3.删除某属性  
         Attribute attribute=root.attribute("size"); root.remove(attribute);

    4.获取某节点的所有属性   
         Element root=document.getRootElement();         
         List attributes =root.attributes();

    5.设置某节点的属性和文字。
         newMemberElm.addAttribute("name", "sitinspring");

    6.设置属性的文字   
         Attribute attribute=root.attribute("name");  
         attribute.setText("sitinspring");

    将文档写入XML文件 
    1.文档中全为英文,不设置编码,直接写入的形式。
    XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));   
    writer.write(document);   writer.close();
    2.文档中含有中文,设置编码格式写入的形式。
    OutputFormat format = OutputFormat.createPrettyPrint();     // 指定XML编码                 
    format.setEncoding("utf-8");
    XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
    writer.write(document);
    writer.close();


    Books.xml Dom4j.java
    <?xml version="1.0" encoding="utf-8"  ?>
    <书架>
            <书>
            <书名 id="001">浪潮之巅</书名>
                    <作者>吴军</作者>
                    <售价>29</售价>
            </书>
            <书>
                    <书名 id='002'>数学之美</书名>
                    <作者>吴军</作者>
                    <售价><第一版>29</第一版></售价>
            </书>
    </书架>
    package com.java.dom4j;

    import java.io.FileOutputStream;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    public class Dom4jDemo {
            public static void main(String[] args) throws Exception {
    //这里要导入第三方架包,右键->新建文件夹(lib),把dom4j-1.6.1.jar拷贝进来;然后选中右键->构建路径->添加到构建路径,资源下回出现“引用的库”,这时候才能点开架包使用
    //做完上面的操作,写代码系统就会提示导入刚才加架包
    //通过saxreader获取document对象
    SAXReader reader = new SAXReader(); 
    Document document = reader.read("Books.xml");
     //按照dom的方式进行操作
            /*1、得到某个具体的节点内容
            2、打印某节点的所有元素节点
            3、修改某个元素节点的主体内容
            4、向指定元素节点中增加子元素节点
            5、向指定元素节点上增加同级元素节点
            6、删除指定元素节点
            7、操作XML文件属性*/
    //获取某个具体的节点内容,得到第一本书的售价
    Element root=document.getRootElement();
    Element firstBookelement=root.element("书");  //这个方法时找出满足条件的第一个元素返回
    Element priceElement = firstBookelement.element("售价");
    String price = priceElement.getText();
    System.out.println("Dom4jDemo.main()"+price);

    //打印某节点的所有元素节点   打印第二本书的所有元素节点
    //dom4j自动过滤空行
    List elements = root.elements();  //这里的list只有两个元素,因为就两本书;这里返回的List集合里装的元素类型是Element
    Element secondBookElement=(Element) elements.get(1);  //List默认类型是object,所以这里get()返回的是Object;这里要向下转型
    List secondBookchild = secondBookElement.elements();
    System.out.println("Dom4JDemo.main()"+secondBookchild.size());
    for(int i=0;i<secondBookchild.size();++i){
          Element child = (Element)secondBookchild.get(i);
          System.out.println(child.getName());
    }
    //修改某个节点的主题内容   把第二本书的名字改《java编程思想》
    Element secondBookName=(Element)secondBookchild.get(0);
    secondBookName.setText("java编程思想");  //内存中改,还没有保存到文件中
    System.out.println(secondBookName.getText());

    //向指定元素节点中增加子元素节点   往第一本书里增加一个销量子节点
    Element addElement=firstBookelement.addElement("销量");  //这个直接增加到最后
    addElement.setText("1000");
    //向指定元素节点上增加同级元素节点  第二本书的 售价 之前增加一个上架分类 计算机
    Element element=DocumentHelper.createElement("上架分类");  //这里区别于上面的addElement(),不能直接添加,要先创建,再在指定位置插入
    element.setText("计算机");
    secondBookchild.add(2, (Object)element); //这里只是插入到了List集合里,写回文件的时候才生效

    //删除指定元素节点
    secondBookElement.remove(element);
    //操作XML文件属性
    String xmlEncoding = document.getXMLEncoding();
    System.out.println("Dom4JDemo.main()"+xmlEncoding);

    //标准的保存语句。
    //dom4j写回文档会自动写换行方便观看
    OutputFormat format = OutputFormat.createPrettyPrint();   // 指定XML编码                  
    format.setEncoding("utf-8");
    XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
    writer.write(document);
    writer.close();
       }
    }
    output.xml
    <?xml version="1.0" encoding="utf-8"?>
    <书架>
      <书>
        <书名 id="001">浪潮之巅</书名> 
        <作者>吴军</作者> 
        <售价>29</售价> 
        <销量>1000</销量>
      </书> 
      <书>
        <书名 id="002">java编程思想</书名> 
        <作者>吴军</作者> 
        <售价>
          <第一版>29</第一版>
        </售价>
      </书>
    </书架>
    指定位置增加上架分类,计算机
    最终控制台结果




  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/meihao1203/p/9181716.html
Copyright © 2011-2022 走看看