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);
- JAVAWEB第六天dom4j解析xml
- JavaWeb - XML解析 - DOM4J
- Javaweb Dom4j解析XMl
- JAVAWEB第六天sax方式解析xml
- Javaweb-xml编程-Dom4j解析xml文档
- 《JavaWeb----利用dom4j解析xml文件》
- dom4j解析xml、javaweb三层架构初探
- javaWeb-day02(用 Dom4j 解析 XML)
- javaweb-day02-2(00:40:06 XML 解析 - Dom4j解析开发包)
- javaweb-day02-3(XML 解析 - Dom4j解析开发包 - XPath)
- 用DOM4J解析XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 解析xml之--DOM4J
- dom4j解析XML
- 使用 dom4j 解析 XML
- xml文件解析-DOM4J
- 使用 dom4j 解析 XML
- idea 生成Javadoc 报GBK编码错误
- Ajax原理
- java 字符串缓冲区 数组类,基本数据类
- UVA
- 为什么我的粉丝那么少?为什么我的文章阅读量那么低?
- JAVAWEB第六天dom4j解析xml
- Python(2.7版本)安装scrapy
- 静态块什么情况下执行
- android项目开发遇到的问题以及处理结果
- c程小白<一>
- Html浏览器的兼容性
- JavaScript基础(15.Dom创建标签)
- 《你不知道的JavaScript(上)》——1.1编译原理
- java守护进程启动和关闭脚本