zoukankan      html  css  js  c++  java
  • 使用DOM4J 对xml解析操作

    转载自:https://blog.csdn.net/redarmy_chen/article/details/12969219

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它.

             对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

           使用Dom4j开发,需下载dom4j相应的jar文件

    一、DOM4j中,获得Document对象的方式有三种:

                         //1.获取document对象(3种方式)

                         //1.1.读取XML文件,获得document对象  

    SAXReader reader = new SAXReader();

    Document document = reader.read("./src/pol.xml");

    //1.2解析XML形式的文本,得到document对象

                         //String text = "<csdn></csdn>";  

    //Document document = DocumentHelper.parseText(text);

    //1.3主动创建document对象.

                            //Document document = DocumentHelper.createDocument();//创建根节点

                            //Element root = document.addElement("csdn");

    二、节点对象操作的方法

    1.获取文档的根节点.

          Element root = document.getRootElement();

        2.取得某个节点的子节点.

          Element element=node.element(“四大名著");

        3.取得节点的文字

            String text=node.getText();

        4.取得某节点下所有名为“csdn”的子节点,并进行遍历.

           List nodes = rootElm.elements("csdn");

             for (Iterator it = nodes.iterator(); it.hasNext();) {  

             Element elm = (Element) it.next(); 

         // do something

     }

         5.对某节点下的所有子节点进行遍历.   

          for(Iterator it=root.elementIterator();it.hasNext();){     

            Element element = (Element) it.next();     

           // do something

     }

        6.在某节点下添加子节点

          Element elm = newElm.addElement("朝代");

        7.设置节点文字.  elm.setText("明朝");

        8.删除某节点.//childElement是待删除的节点,parentElement是其父节点  parentElement.remove(childElment);

        9.添加一个CDATA节点.Element contentElm = infoElm.addElement("content");contentElm.addCDATA(“cdata区域”);

    三、节点对象的属性方法操作

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

             Attribute attribute=root.attribute("id");

        2.取得属性的文字

    String text=attribute.getText();

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

        4.遍历某节点的所有属性  

          Element root=document.getRootElement();     

           for(Iterator it=root.attributeIterator();it.hasNext();){       

               Attribute attribute = (Attribute) it.next();        

               String text=attribute.getText();       

               System.out.println(text); 

      }

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

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

    四、将文档写入XML文件

    1.文档中全为英文,不设置编码,直接写入的形式. 

           XMLWriter writer = new XMLWriter(new  FileWriter("ot.xml"));

           writer.write(document); 

           writer.close();

        2.文档中含有中文,设置编码格式写入的形式.

           OutputFormat format = OutputFormat.createPrettyPrint();// 创建文件输出的时候,自动缩进的格式                 

           format.setEncoding("UTF-8");//设置编码

           XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);

           writer.write(document);

           writer.close();

    五、字符串与XML的转换

    1.将字符串转化为XML

          String text = "<csdn> <java>Java班</java></csdn>";

          Document document = DocumentHelper.parseText(text);

        2.将文档或节点的XML转化为字符串.

           SAXReader reader = new SAXReader();

           Document   document = reader.read(new File("csdn.xml"));           

           Element root=document.getRootElement();   

           String docXmlText=document.asXML();

           String rootXmlText=root.asXML();

           Element memberElm=root.element("csdn");

           String memberXmlText=memberElm.asXML();

    六、案例(解析xml文件并对其进行curd的操作)

    public class test_1 {

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

    // 1.创建saxReader对象

    SAXReader reader = new SAXReader();

    // 2.通过read方法获取一个文件,转换成Document对象

    Document document = reader.read(new File("src/xxx.xml"));

    // 3.获取根节点元素对象

    Element rootElement = document.getRootElement();

    listNodes(rootElement);

    // 4.便利所有元素节点

    // 获取子节点为红楼梦的节点对象

    Element element = rootElement.element("红楼梦");

    // 获取element的id属性节点对象

    Attribute attribute = element.attribute("id");

    // 删除属性

    attribute.detach();

    //  element.remove(attribute);

    // 添加新的属性

    element.addAttribute("name", "作者");

    // 在红楼梦元素节点添加朝代元素的节点

    Element newElement = element.addElement("朝代");

    newElement.setText("清朝");

    // 获取element中作者元素节点对象

    Element author = element.element("作者");

    // 删除元素节点

    boolean remove = element.remove(author);

    System.out.println(remove);

    // 添加CDATA区域

    Element addCDATA = element.addCDATA("红楼梦,是一部爱情小说");

    elementMethod(element);

    // 写入到一个新的文件中

    //  writer(document);

    }

    /*

    * 把document对象写到新的文件

    */

    public static void writer(Document document) throws IOException {

    // 紧凑的格式

    //  OutputFormat format = new OutputFormat().createCompactFormat();

    // 排版缩进的格式

    OutputFormat format = OutputFormat.createPrettyPrint();

    // 设置编码

    format.setEncoding("UTF-8");

    // 创建XmlWriter对象,指定了写出文件及编码格式

    // XMLWriter writer = new XMLWriter(new FileWriter(new

    // File("src/a.xml")),format);

    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/a.xml")), "UTF-8"),

    format);

    writer.write(document);

    writer.flush();

    writer.close();

    }

    /**

    * 遍历当前节点元素下面的所有(元素的)子节点

            *

    */

    public static void listNodes(Element node) {

    System.out.println("当前节点的名称::" + node.getName());

    // 获取当前节点的所有属性节点

    List<Attribute> list = node.attributes();

    // 遍历属性节点

    for (Attribute attr : list) {

    System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue());

    }

    if (!(node.getTextTrim().equals(""))) {

    System.out.println("文本内容::::" + node.getText());

    }

    // 当前节点下面子节点迭代器

    Iterator<Element> it = node.elementIterator();

    // 遍历

    while (it.hasNext()) {

    // 获取某个子节点对象

    Element e = it.next();

    // 对子节点进行遍历

    listNodes(e);

    }

    }

    /**

    * 介绍Element中的element方法和elements方法的使用

            *

    */

    public static void elementMethod(Element node) {

    // 获取node节点中,子节点的元素名称为西游记的元素节点。

    Element e = node.element("西游记");

    // 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点)

    Element author = e.element("作者");

    System.out.println(e.getName() + "----" + author.getText());

    // 获取西游记这个元素节点 中,所有子节点名称为作者元素的节点 。

    List<Element> authors = e.elements("作者");

    for (Element aut : authors) {

    System.out.println(aut.getText());

    }

    // 获取西游记这个元素节点 所有元素的子节点。

    List<Element> elements = e.elements();

    for (Element el : elements) {

    System.out.println(el.getText());

    }

    }

    }

    七、字符串与XML互转换案例

    /*

     * 字符串与XML互转换案例

     */

    public class test_2 {

    public static void main(String[] args) throws Exception {

    //创建saxreader对象

    SAXReader reader = new SAXReader();

    //读取一个文件,把这个文件转换成document对象

    Document document = reader.read(new File("src/a.xml"));

    //获取根元素啊

    Element rootElement = document.getRootElement();

    //把文档转换成字符创串

    String docXmlText = document.asXML();

    System.out.println(docXmlText);

    System.out.println("----------------------");

                  //元素标签根转换的内容

    String rootXmlText = rootElement.asXML();

    System.out.println(rootXmlText);

    System.out.println("----------------");

    //获取java元素标签内的内容

    Element e = rootElement.element("java");

    System.out.println(e.asXML());

    test2();

    }

    /*

    * 创建一个document对象,往document对象添加节点元素  转存为xml文件

            *

    */

    public static void test1() throws Exception {

    Document document = DocumentHelper.createDocument();

    //创建根节点

    Element root = document.addElement("根标签");

    Element child1 = root.addElement("子标签1");

    child1.setText("这是子标签1的内容");

    Element child2 = root.addElement("子标签2");

    child2.setText("这是字标签2的内容");

    writer(document);

    }

    /*

    * 把一个文本字符串转化为Document对象

    */

    public static void test2() throws Exception {

    String text = " <方向><java方向>java班</java方向><云计算>云计算班</云计算></方向>";

    Document document = DocumentHelper.parseText(text);

    Element rootElement = document.getRootElement();

    System.out.println(rootElement.getName());

    writer(document);

    }

    /*

    * 吧document对象写入新的文件

    */

    public static void writer(Document document) throws Exception {

    //紧凑的格式

    //  OutputFormat format = OutputFormat.createCompactFormat();

    //排版缩进的格式

    OutputFormat format = OutputFormat.createPrettyPrint();

    //设置编码

    format.setEncoding("UTF-8");

    //创建XMLWriter对象,指定写出文件及编码格式

    //  XMLWriter writer = new XMLWriter(new FileWriter(new File("src/b.xml")), format);

    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/b.xml")),"UTF-8"),format);

    //写入

    writer.write(document);

    //立即写入

    writer.flush();

    //关闭操作

    writer.close();

    }

    }

  • 相关阅读:
    MySQL-数据表操作
    MySQL基础命令
    Navicat 15激活
    禅道-启动失败问题整理
    python-开头的注释作用及区别
    SpringBoot、SpringCloud版本中GA/PRE/SNAPSHOT的详解
    mybatis的一些重要配置
    简历对应的知识点
    idea的破解
    SFTP和FTP的区别
  • 原文地址:https://www.cnblogs.com/duyachao/p/11342071.html
Copyright © 2011-2022 走看看