JAVAWEB第六天dom4j解析xml

来源:互联网 发布:php 身份证号码验证 编辑:程序博客网 时间:2024/06/14 07:02

一、简介
1、dom4j是一个组织,针对xml解析,提供dom4j解析器
2、dom4j不是属于javase的一部分,使用时的做法:导入dom4j提供的jar包。–创建一个文件夹,通常命名为lib,然后将jar包复制到lib下,右击jar包,build path—add to buildpath,看到jar包变成奶瓶的样子,表示导入成功。
3.dom4j也是形成dom4j树进行解析,但是集合了之前的两种方式优点
4.得到document

SAXReader reader=new SAXReader();Document document=reader.read(url);

5、document 的父接口是Node,如果在document里面找不到要用的方法,去他的父类里面找。
document里面的方法,getRootElement();获取的根节点,返回的是Element,Element也是一个接口,其父接口也是Node。

getParent();获取父节点addElement();添加标签

二、使用dom4j查询xml
1、查询所有那么元素
首先创建解析器,接着获取document,得到根节点,getRootElement,返回的是Element,得到所有的p1标签,
element(qname):获取标签下面的第一个字标签,qname标签的名称
elements(qname):获取标签下的所有字标签(第一层字标签)
element():获取标签下面的所有字标签
得到name,得到name里面的值
(注意导包的时候,要导正确)

package sax;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Test4j {    public static void main(String[] args) throws Exception {        select1();    }    public static void select1() throws Exception {        SAXReader saxReader=new SAXReader();        Document document=saxReader.read("src/p1.xml");        Element root=document.getRootElement();        List<Element> list=root.elements("p1");        //遍历list        for (Element element : list) {            Element name1=element.element("name");            String s=name1.getText();            System.out.println(s);        }    }}

2、查询第一个name 值,这时只需要在获取的p1的时候,用root.element("p1");获取第一个p1即可。然后再获取第一个name
3、获取第二个p1的第一个name值。
得到所有的p1,这时返回一个list,然后通过list的下标来获取第二个p1,list.get(index)

List<Element> list=root.elements("p1");        Element p2=list.get(1);        Element name=p2.element("name");        String s = p2.getText();        System.out.println(s);

3.使用dom4j实现添加操作
在第一个p1标签末尾添加一个元素<sex>nv</sex>
步骤:创建解析器,获得document,得到根节点,得到第一个p1标签(使用element方法),在p1下面添加元素(在p1上面直接使用addElement(“标签名称”)方法,返回一个Element),在添加完成之后的元素上面添加文本(在sex上直接使用sexText(“文本内容”)方法),回写到xml中,格式化OutputFormat,使用creatprettyPrint方法,获得一个漂亮的格式,使用XMLWriter直接new这个类,传递两个参数(第一个参数:xml文件路径,new FileOutputStream(“路径”),第二个参数:格式化类的值)

package sax;import java.io.FileOutputStream;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Testdom4j {    public static void main(String[] args) throws Exception {        addNode();    }    public static void addNode() throws Exception{        SAXReader saxReader=new SAXReader();        Document document = saxReader.read("src/p1.xml");        Element root=document.getRootElement();        Element p1=root.element("p1");        Element sex1=p1.addElement("sex");        sex1.addText("nv");        //回写到xml中        OutputFormat format=OutputFormat.createPrettyPrint();        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/p1.xml"),format);        xmlWriter.write(document);        xmlWriter.close();    }}

4、在指定位置添加元素
在第一个p1下面的age标签之前添加<school>zhenghang</school>
步骤:(1)创建解析器 (2)获得document (3) 获取根节点,获得第一个p1(4)获得p1下面的所有元素,使用elements方法,返回List,使用list里面的方法,在特定位置添加元素即add()方法,使用之前创建元素,创建文本。add(index,element)第一个是要在哪里之前插入,第二个是元素名称。(5)回写到xml中。

package sax;import java.io.FileOutputStream;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;public class Test4 {    public static void main(String[] args) throws Exception {        addCertain();    }    public static void addCertain() throws Exception {        SAXReader saxReader = new SAXReader();        Document document = saxReader.read("src/p1.xml");        Element root = document.getRootElement();        Element p1 = root.element("p1");        List<Element> list = p1.elements();        //创建标签        Element school = DocumentHelper.createElement("school");        school.setText("zhenghang");        list.add(1, school);        //回写到xml中        OutputFormat format = OutputFormat.createPrettyPrint();        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/p1.xml"),format);        xmlWriter.write(document);        xmlWriter.close();    }}

5、方法的封装
得到document和回写到xml进行封装成方法,把传递的文件路径封装成一个常量。

package sax;import java.io.FileOutputStream;import org.dom4j.Document;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Dom4jUtils {    public static final String PATH="src/p1.xml";    public static Document getDocument(String path) {        try {            SAXReader saxReader = new SAXReader();                  Document document = saxReader.read(path);            return document;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    public static void xmlWriters(String path,Document document) {        try {        OutputFormat format = OutputFormat.createPrettyPrint();        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path),format);        xmlWriter.write(document);        xmlWriter.close();        } catch (Exception e){            e.printStackTrace();        }    }}

封装的好处:提高开发效率,提高代码的可维护性。(比如修改路径,只需要修改常量就可以,而不用对其他代码进行更改)
6、修改元素的值
修改第一个p1中age的值

package sax;import org.dom4j.Document;import org.dom4j.Element;public class Test4jj {    public static void main(String[] args) {        modify();    }    public static void modify() {        Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);        Element root = document.getRootElement();        Element p1 = root.element("p1");        //element 获得的是你写的标签的名字中的第一个,不在乎name和age的位置        Element age = p1.element("age");        //修改age的值,setText()可以设置age值,也可以修改age值        age.setText("50");        //回写到文件中        Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);    }}

补:ctrl+shift+o快速导包
7.删除元素
删除school
注意:通过父节点进行删除remove(Element args0),返回值是boolean类型
获取p1,获取p1下面的school,通过p1删除school

Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);        Element root = document.getRootElement();        Element p1 = root.element("p1");        Element sch = p1.element("school");        p1.remove(sch);        Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);

8.获取属性值
增删改需要回写,查询不需要回写。
获取第一个p1的id1属性值通过attributeValue(“属性名称”)方法来实现,返回值是String。

<person>   <p1 id1="aaa">     <name>zhangsan</name>      <age>50</age>      <sex>nv</sex>   </p1>  </person>
Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);        Element root = document.getRootElement();        Element p1 = root.element("p1");        String s=p1.attributeValue("id1");        System.out.println(s);
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果5s上网很慢怎么办 手机一体机死机关不了机怎么办 联想一体机关不了机怎么办 纸巾盒的吸盘老化了怎么办 粘的挂钩老掉怎么办 车载手机支架吸盘吸不住怎么办 吸盘吸不住怎么办才好? 行车记录仪吸盘吸不住怎么办 小米儿童手表二维码丢了怎么办 艾蔻手表二维码丢失了怎么办 玩具直升机遥控器坏了怎么办 玩具飞机遥控器坏了怎么办 玩具无人机遥控器坏了怎么办 玩具遥控车遥控器坏了怎么办 用遥控器关电视后打不开怎么办 汽车遥控器按键坏了怎么办 用遥控器关了电视打不开怎么办 遥控器一个按键坏了怎么办 电视用遥控器关的打不开怎么办 电动车遥控器按键坏了怎么办 海尔空调遥控器按键坏了怎么办 汽车手机支架吸盘吸不住怎么办 车载手机支架吸盘坏了怎么办 假牙的吸盘坏了怎么办 燃气费用一直未交怎么办 凌度gps模块无法定位怎么办? 放疗定位线掉了怎么办 被网络平台骗了怎么办 手机重力传感器坏了怎么办 锤子手机重力传感器坏了怎么办 平板电脑没有开关键怎么办 手机重力感应器坏了怎么办 苹果手机重力感应器坏了怎么办 苹果手机陀螺仪坏了怎么办 狗狗的爪子肿了怎么办 压缩文件之后显示拒绝访问怎么办 压缩文件解压后全散开了怎么办 dnf助手改名字用完了怎么办 缅甸 佤邦 办中国护照 怎么办? 电脑玩游戏网络延迟大怎么办 qq好友空间锁了怎么办