dom4j解析xml

使用dom4j解析xml,一般实际开发中的主流

1)dom4j简介
dom4j,是一个组织,针对xml解析,提供解析器 dom4j,为什么说它是主流!其实在以前dom4j只是sum公司的一个部门,后来独立出来提供了dom4j,它结合很多jaxp的优点。dom4j不是javase的一部分,所以我们要使用它的时候必须要先导入dom4j的包。晚点跟xpath包和手册一起上传给大家,上传给大家下载
2)如何导入包操作

首先创建一个文件夹 lib,然后将包复制到该文件夹之下, 在jar包上右键选择->build path->Configure Build Path
结果:如果你看到一个小奶瓶的话表示导入成功,看截图

这里写图片描述
3)如何使用dom4j
这里介绍一个方法:我上传的文件中,包含了dom4j的文档说明。到底怎么查看?截图
这里写图片描述
这里写图片描述

4)一些函数:

//得到document,【注意】document的父接口是Node,如果在document里面找不到想要的方法,到Node里面去找  
         SAXReader reader = new SAXReader();
         Document document = reader.read(url);

// document里面的方法 , 获取根节点 返回的是Element,一般从根节点往下操作 
        getRootElement() 

//Element也是一个接口,父接口是Node,Element和Node里面方法
        //获取父节点
        getParent();
        //添加标签,一般是父标签添加
        addElement();
        //表示获取标签下面的第一个子标签qname:标签的名称
        element(qname); 
        //获取标签下面是这个名称的所有子标签(一层)qname:标签名称   
        elements(qname);    
        //获取标签下面的所有一层子标签
         elements();

5)上代码案例
xml

//man.xml 路径:src/man.xml
<?xml version="1.0" encoding="UTF-8"?>
<preson> 
  <p1> 
    <name id1="xiaozheng">zhangsan</name>  
    <age>100</age> 
  </p1>  
  <p1> 
    <name>lisi</name>  
    <age>20</age> 
  </p1> 
</preson>

查询所有name元素里面的值

//name在一定在根节点之下,那么前三步固定,独立出来,得到根节点
SAXReader saxReader = new SAXReader();  //创建解析器
Document document = saxReader.read("src/man.xml"); //得到doc
Element root = document.getRootElement();           //得到根节点
//获得到跟节点下面的所有p1
List<Element> list = root.elements("p1");
        //遍历,找到name并且输出
        for (Element element : list) {
            Element name = element.element("name"); //p1下面寻找name
            String  s = name.getText();  //得到name值 
            System.out.println(s);       //打印
        }
        //说到底就是里面element()等三个函数,层层递进,去找所需要的标签

得到第二个name

//前三部参考上面得到根节点。
        List<Element> list = root.elements("p1");
        Element p2 = list.get(1);
        Element name = p2.element("name");
        String  s = name.getText();
        System.out.println("第二个名字"+s);

增加:在第一个p1标签末尾添加一个元素 nv

//需求:p1添加,节点,也是就找到p1调用addElement();即可
        Element p1 = root.element("p1");
        Element sex1 = p1.addElement("sex");
        sex1.setText("nv");     
        //回写操作,原因跟前面一样,单独分离出来写,后面多次用到

回写操作:四步,不懂看jaxp那篇,为什么要回写

OutputFormat format = OutputFormat.createPrettyPrint(); //可以有缩进的效果
XMLWriter  xmlWriter = new XMLWriter(new FileOutputStream("src/man.xml"), format);
xmlWriter.write(document);
xmlWriter.close();

增加:在第一个p1下面的age标签之前添加 < school>ecit.edu.cn< /schlool>

//需求:在某个标签之前添加,如果说,利用之前的找到age后添加就成了
<age>
    <school></school>
</age>不符合要求
    //前三步还是一样
    Element p1 = root.element("p1");
    List<Element> list = p1.elements();
    Element school = DocumentHelper.createElement("school");
    school.setText("ecit.edu.cn");
    list.add(1,school);

修改:修改第一个p1下面的age元素的值 30

    //前三步骤一样
    Element p1 = root.element("p1");
    Element age = p1.element("age");
    age.setText("100");
    //回写操作

删除:删除第一个p1下面的ecit元素

        //前三步骤一样
        Element p1 = root.element("p1");
        Element school = p1.element("school");
        p1.remove(school);
        //回写操作

属性获取:获取第一个p1里面的属性id1的值

    //前三步骤一样的
    Element p1 = root.element("p1");
    Element name = p1.element("name");
    String value = name.attributeValue("id1");
    System.out.println(value);

到此为止,已经把dom4j的增删改查全部讲完了,其实dom4j的操作非常简单,只要记住获取节点的element()方法,灵活变化就可以了。这里有个特别注意的一点是导类,一定要导入dom4j里面的document,node类,否则出错。看图

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值