7.使用dom4j实现增删改查
1.导入dim4j提供的jar包
(1)dom4j,是一个组织,针对xml解析,提供解析器dom4j
(2)dom4j不是javase的一部分(jaxp是的)
(3)使用dom4j步骤
- 下载并导入dom4j提供的jar包
- 创建一个lib文件夹,并把jar包放到里面
- 右键点击jar包, build path --> add to buildpath
- 看到jar包变成一个奶瓶养殖,表示导入成功
(4)下载地址 https://dom4j.github.io/ 下载后缀名为 .zip的文件 它里面提供了许多帮助文档
(5)查看快速开发
- 解压后 dom4j-1.6.1-->docs-->打开index.html-->点击左上角的 Quick start 我们可以看到很多实例
(6)在线api文档地址 https://www.oschina.net/uploads/doc/dom4j-1.6.1/index.html
2.解析xml
(1)获取document(SAXReader
creates a DOM4J tree from SAX parsing events.)
//获取解析器 SAXReader saxReader = new SAXReader(); //获取文档 Document document = saxReader.read("xml文件路径");
(2)document的父接口是Node
- Node中的一些方法
getName() 获取元素名
getParent() 获取元素的父元素
getText() 获取元素的值
setText(String text) 修改元素的值(这个会覆盖原来的值)
- document接口的一些方法
getRootElement() 获取xml的根元素,返回Element
(3)Element父接口Node
- Element中的一些方法
addAttribute(String name, String value) 给元素添加属性
addText(String text) 在元素原有的值上追加文字
attributeValue(String name) 获取元素的属性值
attributeIterator() 返回一个Iterator迭代器
(4)如果我们对xml进行了增删改,那么我们需要更新xml文件
OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/Day3/text.xml"),format); xmlWriter.write(document); xmlWriter.close();
OutputFormat.createPrettyPrint() : 表示格式化(就是有缩进的格式)
3.实例如下
xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <persion> <p ID="AAA"> <name>李四</name> <age>88</age> </p> <p> <name>张三</name> <age>55</age> </p> </persion>
//需求1:获取xml中所有的name元素的值
package Day3; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Demo1 { public static void main(String[] args) throws Exception { //创建解析器 SAXReader saxReader = new SAXReader(); //得到document Document document = saxReader.read("src/Day3/text.xml"); //获取根节点 Element element = document.getRootElement(); //获取所有p元素 List<Element> list = element.elements("p"); //遍历p元素 for (Element p : list) { //获取每个p元素中的name元素 Element name = p.element("name"); //获取name元素的值 String str = name.getText(); //输出 System.out.println(str); } } }
//需求2:查询第一个p元素中的name元素的值
package Day3; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Demo2 { public static void main(String[] args) throws Exception { //获取解析器(org.dom4j.io.SAXReader) SAXReader saxReader = new SAXReader(); //获取文档(org.dom4j.Document) Document document = saxReader.read("src/Day3/text.xml"); //获取根元素(org.dom4j.Element) Element element = document.getRootElement(); //获取所有的p元素(List集合 java.util.List) List<Element> list = element.elements("p"); //获取第一个p元素 Element p1 = list.get(0); //获取第一个name元素 Element name1 = p1.element("name"); //输出第一个name元素的值 System.out.println(name1.getText()); } }
//需求3:在第一个p元素里面添加一个元素<sex>女</sex>
package Day3; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Demo3 { public static void main(String[] args) throws Exception { //获取解析器 SAXReader saxReader = new SAXReader(); //获取document Document document = saxReader.read("src/Day3/text.xml"); //获取根元素 Element element = document.getRootElement(); //获取第一个p元素 Element p1 = element.element("p"); //在p1里面添加一个标签(<sex>女</sex>) Element sex = p1.addElement("sex"); //在新添加的标签里面写入文字 sex.setText("女"); //更新xml文件 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/Day3/text.xml"), format); xmlWriter.write(document); xmlWriter.close(); } }
//需求4:在指定地方添加元素<school>家里蹲大学</school>
package Day3; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; 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 Demo4 { public static void main(String[] args) throws Exception { //获取解析器 SAXReader saxReader = new SAXReader(); //获取document Document document = saxReader.read("src/Day3/text.xml"); //获取根元素 Element element = document.getRootElement(); //获取第一个p元素 Element p = element.element("p"); //获取p元素中的所有元素 List<Element> list = p.elements(); //创建需要添加的元素 Element addElement = DocumentHelper.createElement("school"); //在创建的元素中写入文字 addElement.setText("家里蹲大学"); //把创建的元素添加到集合指定的地方 list.add(1, addElement); //更新xml文件 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/Day3/text.xml"),format); xmlWriter.write(document); xmlWriter.close(); } }
//需求5:修改第一个p元素中的age元素的值
package Day3; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Demo5 { public static void main(String[] args) throws Exception { //获取解析器 SAXReader saxReader = new SAXReader(); //获取document Document document = saxReader.read("src/Day3/text.xml"); //获取根元素 Element element = document.getRootElement(); //获取第一个p元素 Element p = element.element("p"); //获取第一个p元素的age元素 Element age = p.element("age"); //修改第一个p元素的age元素的值为30 age.setText("30"); //更新xml OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/Day3/text.xml"),format); xmlWriter.write(document); xmlWriter.close(); } }
//需求6:删除第二个p元素的name元素
package Day3; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Demo6 { public static void main(String[] args) throws Exception { //获取解析器 SAXReader saxReader = new SAXReader(); //获取document Document document = saxReader.read("src/Day3/text.xml"); //获取根元素 Element element = document.getRootElement(); //获取所有p元素 List<Element> list = element.elements("p"); //获取第二个p元素 Element p2 = list.get(1); //获取第二个p元素的name元素 Element name = p2.element("name"); //通过父元素删除子元素(要被删除的元素) p2.remove(name); //更新xml文件 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/Day3/text.xml"),format); xmlWriter.write(document); xmlWriter.close(); } }
//需求7:获取第一个p元素的ID值
package Day3; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Demo7 { public static void main(String[] args) throws Exception { //获取解析器 SAXReader saxReader = new SAXReader(); //获取document Document document = saxReader.read("src/Day3/text.xml"); //获取根元素 Element element = document.getRootElement(); //获取第一个p元素 Element p = element.element("p"); //获取第一个p元素的ID值 String strid = p.attributeValue("ID"); //输出 System.out.println(strid); } }