DOM4J解析XML

更新时间:2020-07-06 11:08:55点击次数:253次
DOM4J介绍
DOM4J是一款开源的库,主要应用于解析XML、XPath和XSLT。由于它使用很简单,目前特别是在大数据领域,DOM4J越来越受到数据分析者的青睐,下面就来看看它是如何解析XML文件的。

使用DOM4J操作XML
在介绍之前,先简单说一说DOM4J的基本语法。
1、读取XML文件,获得document对象。

    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("xmlfiles/dom4jtest.xml"));

2、获取文档根节点(或某个节点)。

    Element root = document.getRootElement();

3、获取根节点(或某个节点)的单个子节点。

    Element child = root.element("name");

4、获取根节点(或某个节点)的多个子节点并进行遍历

    List children=root.elements("name");
    Iterator it = children.iterator();
    while (it.hasNext()){
        Element element = (Element) it.next();
    }

5、添加节点。

    Element newElm=elm.addElement("gender");

6、设置节点内容。

    newElm.setText("男");

7、获取节点内容。

    String childNameText = newElm.getText();



    String childNameText = elm.elementText("gender");

8、删除节点。

    Element childElm = elm.element("name");
    elm.remove(childElm);

9、获取节点属性。

    Attribute attrId = elm.attribute("id");

10、设置节点属性和文本值。

    elm.addAttribute("class","2");

11、获取属性文本值。

    String text = attrId.getValue();

12、删除节点属性。

    Attribute attrId = elm.attribute("id");
    elm.remove(attrId);

13、将文档写入XML文件。

    OutputFormat format=OutputFormat.createPrettyPrint();
    //format.setEncoding("UTF-8");
    XMLWriter writer =new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/dom4jtest.xml"),"UTF-8"),format);
    writer.write(document);
    writer.flush();
    writer.close();

使用DOM4J操作XML完整实例

先创建一个xml文件,文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <root> 
      <student id="1"> 
        <name>李赞</name>  
        <age>11</age>  
        <gender>男</gender>  
      </student>  
      <student id="2"> 
        <name>宋蔚然</name>  
        <age>10</age>  
        <gender>女</gender>  
      </student>  
      <student id="3"> 
        <name>桑月</name>  
        <age>10</age>  
        <gender>女</gender>  
      </student>  
      <student id="4"> 
        <name>李师师</name>  
        <age>12</age>  
        <gender>女</gender>  
        <teacher>王老师</teacher>
      </student>  
      <student id="5"> 
        <name>郭啸天</name>  
        <age>10</age>  
        <gender>男</gender>  
      </student> 
    </root>

DOM4J操作XML代码如下:

    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.util.Iterator;
    import java.util.List;
    
    
    public class Dom4jTest {
        public static void main(String[] args) {
    
            try {
                SAXReader reader =new SAXReader();
                Document document=reader.read(new File("xmlfiles/dom4jtest.xml"));
                //获取根节点
                Element root=document.getRootElement();
                //获取根节点下所有名为student的子节点
                List students = root.elements("student");
                Iterator it = students.iterator();
                //遍历子节点
                while (it.hasNext()){
                    Element elm=(Element)it.next();
                    //在每个student节点增加teacher子节点
                    Element newElm=elm.addElement("teacher");
                    //设置属性内容
                    newElm.setText("王老师");
                    //获取id属性
                    Attribute attrId = elm.attribute("id");
                    //获取id属性内容
                    String textId = attrId.getValue();
                    elm.addAttribute("class","四年级一班");
                    System.out.print(textId+"\t");
                    System.out.print(elm.attribute("class").getValue()+"\t");
                    System.out.print(elm.elementText("name")+"\t");
                    System.out.print(elm.elementText("age")+"\t");
                    System.out.print(elm.elementText("gender")+"\t");
                    System.out.print(elm.elementText("teacher")+"\t");
                    System.out.println();
                }
    
                OutputFormat format= OutputFormat.createPrettyPrint();
                //format.setEncoding("UTF-8");
                XMLWriter xmlWriter=new XMLWriter(new OutputStreamWriter(new FileOutputStream("xmlfiles/dom4jtest.xml"),"UTF-8"),format);
                xmlWriter.write(document);
                xmlWriter.flush();
                xmlWriter.close();
                System.out.println("数据已成功保存。");
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

运行结果如下:

1 四年级一班 李赞 11 王老师
2 四年级一班 宋蔚然 10 王老师
3 四年级一班 桑月 10 王老师
4 四年级一班 李师师 12 王老师
5 四年级一班 郭啸天 10 王老师
数据已成功保存

代码执行后xml文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <root> 
      <student id="1" class="四年级一班"> 
        <name>李赞</name>  
        <age>11</age>  
        <gender>男</gender>  
        <teacher>王老师</teacher>
      </student>  
      <student id="2" class="四年级一班"> 
        <name>宋蔚然</name>  
        <age>10</age>  
        <gender>女</gender>  
        <teacher>王老师</teacher>
      </student>  
      <student id="3" class="四年级一班"> 
        <name>桑月</name>  
        <age>10</age>  
        <gender>女</gender>  
        <teacher>王老师</teacher>
      </student>  
      <student id="4" class="四年级一班"> 
        <name>李师师</name>  
        <age>12</age>  
        <gender>女</gender>  
        <teacher>王老师</teacher>
      </student>  
      <student id="5" class="四年级一班"> 
        <name>郭啸天</name>  
        <age>10</age>  
        <gender>男</gender>  
        <teacher>王老师</teacher>
      </student> 
    </root>

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息