javawebday08补充(jaxp的sax解析 dom4j解析xml 查询 添加 )
来源:互联网 发布:vba聊天软件编程 编辑:程序博客网 时间:2024/06/11 08:16
/* * 使用jaxp的sax方式解析xml * sax方式不能实现增删改操作 只能做查询操作 * 打印整个文档 * 执行parse方法 第一个参数xml路径 第二个参数 是事件处理器 * 创建一个类 继承事件处理器的类 * 重写里面的三个方法 * 获取到所有的name元素的值 * 定义一个成员变量 flag=false * 判断开始方法是否是name元素 如果是name元素 把flag值设置成 true * 如果flag值是true 在characters方法里面打印内容 * 当执行到结束方法时候把 flag值设置成false * 获取第一个name元素的值 * 定义一个成员变量 index=0 * 在结束方法时候 index+1 index++ * 想要打印出第一个name元素的值 * 在characters方法里面判断 * 判断flag=true 并且 index==0 再打印内容 * 使用dom4j解析xml * dom4j 是一个组织 针对xml解析 提供解析器 dom4j * dom4j不是javase的一部分 想要使用第一步需要 * 导入dom4j提供的jar包 * 创建一个文件夹lib * 复制jar包到lib下面 * 右键jar包 build path -- add to buildpath * 看到jar包 变成奶瓶样子 表示导入成功 * 得到document * SAXReader reader = new SAXReader(); * Document document = reader.read(); * document的父接口是Node * 如果在document里面找不到方法 在Node里面找 * document里面的方法 getRootElement() 获取根节点 返回的是Element * Element也是一个接口 父接口是Node * Element和Node里面方法 * getParent() 获取父节点 * addElement() 添加标签 * element(qName) * 表示获取标签下面的第一个子标签 * qname标签的名称 * elements(qName) * 获取标签下面的是这个名称的所有子标签(一层) * qname 标签名称 * elements() * 获取标签下面的所有一层子标签 * 使用dom4j查询xml * 解析是从上到下的解析 * 查询所有name元素里面的值 * 1、创建解析器 * 2、得到一个document * 3、得到根节点 getRootElement() 返回Element * * 4、得到所有的p1标签 * elements("head") 返回list集合 * 遍历list得到每一个head * 5、得到name * 在head 下面执行element("name")方法 返回Element * 6、得到name里面的值 * getText()方法得到值 * 查询第一个name元素的值 * 1、创建解析器 * 2、得到一个document * 3、得到根节点 getRootElement() 返回Element * * 4、得到所有的p1标签 * element("head") 返回Element * 5、得到name * 在head 下面执行element("name")方法 返回Element * 6、得到name里面的值 * getText()方法得到值 * 获取第二个title元素的值 * 1、创建解析器 * 2、得到一个document * 3、得到根节点 getRootElement() 返回Element * * 4、得到所有的head标签 * elements("head") 返回list集合 * 5、遍历得到第二个head * 使用list下标得到 get方法 集合的下标从0开始 想要得到第二个 下标写1 * * 6、得到第二个head里面的title * element("title") 方法 返回Element * 7、得到title的值 * getText()方法 * 使用dom4j实现添加操作 * 在第一个head标签末尾添加一个元素<age>11</age> * 步骤 * 1、创建解析器 * 2、得到document * 3、得到根节点 * 4、获取到第一个head * 使用element方法 * 5、在head下面添加元素 * 在head上面直接使用addElement("标签名称") 方法 返回一个Element * 6、在添加完成滞后的元素下面添加文本 * 在age上面直接使用 setText("文本内容")方法 * 7、回写xml * 格式化 OutputFormat 使用 createPrettyPrint 方法 表示一个漂亮的格式 * 使用类XMLWriter 直接new 这个类 传递两个参数 * 第一个参数是xml文件路径 new FileOutputStream("路径") * 第二个参数是格式化类的名称 * 在特定的位置添加元素 * 在第一个head下面的age标签添加<school>abc</school> * 步骤 * 1、创建解析器 * 2、得到document * 3、得到根节点 * 4、获取到第一个head * 5、获取head下面年的所有的元素 * elements()方法 返回list集合 * 使用list里面的方法 在特定位置添加元素 * 首先创建 元素 在元素下面创建文本 * 使用DocumentHelper类方法 createElement创建标签 * 把文本添加到标签下面 使用setText("文本内容")方法 * list集合里面的add(int index,E element) * 第一个参数是 位置下标 从0开始 * 第二个参数是 要添加的元素 * 6、回写xml * * 可以对得到document的操作和回写xml的操作 封装成方法 * 也可以把传递的文件连接 封装成一个常量 * 好处 可以提高开发速度 可以提高代码可维护性 * 比如想要修改文件路径(名称) 这个时候只需要修改常量的值就行了 */
//在第一个head标签下的age标签之前添加<school>abc</school> public static void addSchool() throws Exception{ /* * 1、得到根节点 * 2、获取到第一个head * 3、获取head下面的所有元素 * elements()方法 返回list集合 * 使用list里面的方法在特定位置添加元素 * 创建元素 * add(int index,E element) * 第一个参数是位置下标 从0开始 * 第二个参数是要添加的元素 * 4、回写xml */ //创建解析器 SAXReader saxr = new SAXReader(); //得到document Document document = saxr.read("src\\ee\\11.out.xml"); //得到根结点 Element root = document.getRootElement(); //获取到第一个head Element head = root.element("head"); //获取head下面的所有元素 List<Element> list = head.elements(); //创建元素 使用 Element school = DocumentHelper.createElement("school"); //在school上面创建文本 school.setText("abc"); //在特定的位置添加 list.add(0, school); //上面的操作都在内存中完成 还需要回写到xml中 //回写xml OutputFormat of = OutputFormat.createPrettyPrint(); XMLWriter xmlw = new XMLWriter(new FileOutputStream("src\\ee\\12.out.xml"),of); //把操作的文档写入到xml里面 如果没有 文件写不出去 xmlw.write(document); xmlw.close(); } //在第一个head标签末尾添加一个元素<age>11</age> public static void addAge() throws Exception{ /* * 1、得到根节点 * 2、获取到第一个head * 3、在head下面添加元素 * 4、在添加完成之后的元素下面添加文本 * 5、回写xml */ //创建解析器 SAXReader saxr = new SAXReader(); //得到document Document document = saxr.read("src\\ee\\11.out.xml"); //得到根节点 Element root = document.getRootElement(); //得到第一个head元素 Element head = root.element("head"); //在下面直接添加元素 Element age = head.addElement("age"); //在age下面添加文本 age.setText("11"); //回写xml OutputFormat of = OutputFormat.createPrettyPrint();//可以有缩进的效果 //OutputFormat of = OutputFormat.createCompactFormat();//都一行 压缩的格式 XMLWriter xmlw = new XMLWriter(new FileOutputStream("src/ee/11.out.xml"),of); xmlw.write(document); xmlw.close(); } //得到第二个title元素的值 public static void selectSecond() throws Exception { /* * 1、得到根节点 * 2、得到head标签 * 3、遍历得到第二个head * 4、得到第二个head下面的title * 5、得到title的值 */ Element root = getRoot(); //得到所有的head List<Element> list = root.elements("head"); //得到第二个head list 集合下标从0开始 Element h2 = list.get(1); //得到h2下面的title Element title = h2.element("title"); //得到title里面的值 String s = title.getText(); System.out.println(s); } //获取到第一个title元素的值 public static void selectFirst() throws Exception { /* * 1、创建解析器 * 2、得到document * 3、得到根节点 * 4、得到第一个head元素 * 5、得到head下面的title元素 * 6、得到title元素里面的值 */ //创建解析器 Element root = getRoot(); //得到第一个head元素 Element head = root.element("head"); //得到head下面的title元素 Element title = head.element("title"); //得到title元素里面的值 String s = title.getText(); System.out.println(s); } private static Element getRoot() throws DocumentException { SAXReader saxr = new SAXReader(); //得到document Document document = saxr.read("src\\ee\\11.out.xml"); //得到根节点 Element root = document.getRootElement(); return root; } //查选xml中所有title元素的值 public static void selecttitle() throws Exception { Element root = getRoot(); //得到head List<Element> list = root.elements("head"); //遍历list for (Element element : list) { //element是每一个head元素 //得到head下的title元素 Element title = element.element("title"); //得到title里面的值 String s = title.getText(); System.out.println(s); }
阅读全文
0 0
- javawebday08补充(jaxp的sax解析 dom4j解析xml 查询 添加 )
- XML、Jaxp SAX解析、dom4j解析XML、XPath运用
- javawebday08(sax解析入门)
- XML解析(增删改查)-DOM解析(Jaxp、DOM4J实现DOM解析)、SAX解析(Jaxp实现SAX解析)
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- 【XML】JAXP-SAX解析xml
- XML的Jaxp中的SAX解析
- jaxp的sax方式解析xml
- JAXP的SAX解析
- JAXP 的 SAX 解析
- jaxp sax解析xml代码
- xml解析-jaxp-sax方式
- jaxp利用Sax解析XML
- day05 Schema约束,JAXP的SAX解析,DOM4J
- JavaWeb系列之四(XML的解析技术(dom,sax)和解析器(jaxp,dom4j))
- XML的jaxp版DOM解析 和SAX解析
- xml解析技术-jaxp-sax解析
- web day6 DOM&XML(JAXP的SAX解析XML,schema入门,dom4j&XPath的增删改查)
- Python二进制串转换为通用字符串
- Python中的is
- 文件打开模式 w+ r+ a+ 区别和辨析
- 欢迎使用CSDN-markdown编辑器
- Java第三周作业(2)
- javawebday08补充(jaxp的sax解析 dom4j解析xml 查询 添加 )
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles
- 【亲测,最实用】Centos系统下,mysql异常停止服务
- springboot开发笔记(1.环境准备)
- 一个列表点击某一个返回它的index
- 例题6-21 系统依赖(System Dependencies, ACM/ICPC World Finals 1997, UVa506)
- 第三周项目一(2)
- Centos 7 搭建 Zookeeper 集群
- 小木棍 [数据加强版]