dom4j解析xml

来源:互联网 发布:.net core 2.0 知乎 编辑:程序博客网 时间:2024/05/29 04:38

使用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"); //得到docElement root = document.getRootElement();           //得到根节点
//获得到跟节点下面的所有p1List<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
原创粉丝点击