dom4j解析xml文件基本操作

本文介绍使用DOM4J库进行XML文件的操作方法,包括查询、添加、修改、删除及获取属性值等实用技巧。

概述

dom4j解析xml 包括:查询、添加、修改、删除、获取属性值
写了一个针对dom4j的工具类,减少代码量
注:dom4j不是javase的一部分,需要导入jar文件
代码每一行都有注释

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<person> 
  <p1 id="1111"> 
    <name>AAA</name>  
    <age>11</age> 
  </p1>  
  <p1> 
    <name>BBB</name>  
    <age>99</age> 
  </p1> 
</person>

java代码

package xxy.test.dom4j;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import xxy.dom4j.util.dom3jUtil;
/**
 * @author 许湘扬 2017-2-21
 * @说明   dom4j解析xml 包括:查询、添加、修改、删除、获取属性值
 */
public class testDom4j 
{
    public static void main(String[] args) throws DocumentException, IOException 
    {
        //selectName();     //查询xml中所有name元素的值
        //selectOneName();  //查询xml中一个name元素的值
        //addSex();         //给第一个name元素添加一个<sex>标签
        //addSchoolBetweenNameAndAge();//在第一个p1标签下的<name>和<age>之间添加<school>标签
        //modify();         //修改第一个p1下面的age元素的值</age>30</age>
        //remove();         //删除第一个p1标签下的<name>和<age>之间添加<school>标签
        //getAttribute();   //获得第一个p1里面的属性ID的值
    }
    //查询xml中所有name元素的值
    public static void selectName() throws DocumentException
    {
        //1、创建解析器
        SAXReader read=new SAXReader();
        //2、得到document
        Document document=read.read("src/p1.xml");
        //3、得到根节点
        Element root=document.getRootElement();
        //4、得到<p1>标签
        List<Element> list=root.elements("p1");
        //5、得到p1标签下的name
        for (Element element : list) 
        {
            //得到每一个p1下面的name元素上
            Element name1=element.element("name");
            //6、得到name里面的值
            String s=name1.getText();
            System.out.println(s);
        }
    }
    //查询xml中一个name元素的值
    public static void selectOneName() throws DocumentException
    {
        //1、创建解析器
        SAXReader read=new SAXReader();
        //2、得到document
        Document document=read.read("src/p1.xml");
        //3、得到根节点
        Element root=document.getRootElement();
        //4、得到第一个<p1>标签
        Element p1=root.element("p1");
        //5、得到第一个name标签
        Element name1=p1.element("name");
        //6、得到name的值
        System.out.println(name1.getText());
    }
    //给第一个name元素添加一个<sex>标签
    public static void addSex() throws DocumentException, IOException
    {
        //1、创建解析器
        SAXReader read=new SAXReader();
        //2、得到document
        Document document=read.read("src/p1.xml");
        //Document document=dom3jUtil.getDocument(dom3jUtil.PATH);//自己封装的工具类
        //3、得到根节点
        Element root=document.getRootElement();
        //4、得到第一个<p1>标签
        Element p1=root.element("p1");
        //5、先在p1下面直接添加元素
        Element sex1=p1.addElement("sex");
        //6、在sex下面添加文本
        sex1.setText("nv");
        //7、回写xml
        OutputFormat format=OutputFormat.createPrettyPrint();//可以有缩进效果
        //OutputFormat format=OutputFormat.createCompactFormat();//全部变成一行
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/p1.xml"),format);
        xmlWriter.write(document);
        xmlWriter.close();
        //dom3jUtil.backWriter("src/p1.xml", document);//或用自己封装的工具类
    }
    //在第一个p1标签下的<name>和<age>之间添加<school>标签
    public static void addSchoolBetweenNameAndAge() throws DocumentException, IOException
    {
        //1、创建解析器
        SAXReader read=new SAXReader();
        //2、得到document
        Document document=read.read("src/p1.xml");
        //3、得到根节点
        Element root=document.getRootElement();
        //4、得到第一个<p1>标签
        Element p1=root.element("p1");
        //5、获得p1的所有子元素
        List<Element> list=p1.elements();
        //6、创建school标签 
        Element school=DocumentHelper.createElement("school");
        school.setText("CQUPT");
        //7、在指定位置添加
        list.add(1, school);
        //8、回写
        OutputFormat format=OutputFormat.createPrettyPrint();//可以有缩进效果
        //OutputFormat format=OutputFormat.createCompactFormat();//全部变成一行
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/p1.xml"),format);
        xmlWriter.write(document);
        xmlWriter.close();
    }
    //修改第一个p1下面的age元素的值</age>30</age>
    public static void modify()
    {
        //1、得到document
        Document document=dom3jUtil.getDocument(dom3jUtil.PATH);
        //2、得到root节点
        Element root=document.getRootElement();
        //3、得到第一个p1标签
        Element p1=root.element("p1");
        //4、得到第一个p1的age标签
        Element age1=p1.element("age");
        //5、修改age的值
        age1.setText("909");
        //6、回写
        dom3jUtil.backWriter(dom3jUtil.PATH, document);
    }
    //删除第一个p1标签下的<name>和<age>之间添加<school>标签
    public static void remove()
    {
        //1、得到document
        Document document=dom3jUtil.getDocument(dom3jUtil.PATH);
        //2、得到root节点
        Element root=document.getRootElement();
        //3、得到第一个p1标签
        Element p1=root.element("p1");
        //4、得到school标签
        Element school=p1.element("school");
        //5、用p1删除school标签
        p1.remove(school);
        //6、回写
        dom3jUtil.backWriter(dom3jUtil.PATH, document);
    }
    //获得第一个p1里面的属性ID的值
    public static void getAttribute()
    {
        //1、得到document
        Document document=dom3jUtil.getDocument(dom3jUtil.PATH);
        //2、得到root节点
        Element root=document.getRootElement();
        //3、得到第一个p1标签
        Element p1=root.element("p1");
        //4、打印输出属性ID的值
        System.out.println(p1.attributeValue("id"));
    }
}   

工具类代码

package xxy.dom4j.util;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
 * @author 许湘扬 2017-2-21
 * @邮箱   547139255@qq.com
 * @说明   dom4j工具类,封装一些方法
 */
public class dom3jUtil
{
    public static final String PATH="src/p1.xml";
    /*
     *返回document对象
     */
    public static Document getDocument(String path)
    {
        //1、创建解析器
        SAXReader read=new SAXReader();
        //2、得到document
        try 
        {
            Document document=read.read(path);
            return document;
        } catch (DocumentException e) 
        {
            System.out.println("文件读取异常");;
        }
        return null;
    }
    /*
     * 封装回写
     */
    public static void backWriter(String path,Document document)
    {
        OutputFormat format=OutputFormat.createPrettyPrint();//可以有缩进效果
        //OutputFormat format=OutputFormat.createCompactFormat();//全部变成一行
        XMLWriter xmlWriter;
        try 
        {
            xmlWriter = new XMLWriter(new FileOutputStream(path),format);
            xmlWriter.write(document);
            xmlWriter.close();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

补充 Xpath

package xxy.test.Xpath;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import xxy.dom4j.util.dom3jUtil;

/**
 * @author  许湘扬 2017-2-21
 * @邮箱    547139255@qq.com
 * @说明    使用Xpath
 */
public class TestXpath 
{
    public static void main(String[] args)
    {
        //selectAllName();
        //selectFName();
    }
    //选择所有的name标签
    public static void selectAllName()
    {
        Document document=dom3jUtil.getDocument(dom3jUtil.PATH);
        //使用document.selectNodes("//name");获得
        List<Node> list=document.selectNodes("//name");
        for (Node node : list)
        {
            System.out.println(node.getText());
        }
    }
    //获取第一个p1下面的name的值
    public static void selectFName()
    {
        Document document=dom3jUtil.getDocument(dom3jUtil.PATH);
        //使用document.selectSingleNode("");获得
        Node name=document.selectSingleNode("//p1[@id='1111']/name");
        System.out.println(name.getText());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值