DOM4J解析XML

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>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值