1.Dom4j简介:
DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。
DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。
Dom:把整个文档作为一个对象。
DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:
创建xml文件:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="UTF-8"?> <phoneInfo> <brand name="小米"> <type name="小米8"/> <type name="小米9"/> <type name="小米MIX"/> </brand> <brand name="iPhone"> <type name="iPhone9"/> <type name="iPhoneX"/> <type name="iPhoneXS"/> </brand> <brand name="华为"> <type name="P20"/> <type name="P30"/> <type name="P30 pro"/> </brand> </phoneInfo>
xml解析——查询
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package cn.kgc.dom4jtest; 2 3 import org.dom4j.Document; 4 import org.dom4j.Element; 5 import org.dom4j.io.SAXReader; 6 7 import java.util.Iterator; 8 9 /** 10 * xml 解析 11 */ 12 public class Test { 13 public static void main(String[] args) { 14 SAXReader saxReader = new SAXReader(); 15 try { 16 //读取xml 文件,并生成document对象,现可通过document来操作文档 17 Document document = saxReader.read("src/info.xml"); 18 //获取到文档的根节点 19 Element rootElement = document.getRootElement(); 20 System.out.println("根节点的名字是"+rootElement.getName()); 21 //获取子节点列表 22 Iterator it = rootElement.elementIterator(); 23 while (it.hasNext()){ 24 Element fistChild = (Element) it.next(); 25 //System.out.println(fistChild.getName()); 26 //获取节点的属性值 27 System.out.println(fistChild.attribute("name").getValue()); 28 //获取子节点的下一级节点 29 Iterator iterator = fistChild.elementIterator(); 30 while (iterator.hasNext()){ 31 Element element = (Element) iterator.next(); 32 System.out.println("\t"+element.attributeValue("name")); 33 } 34 } 35 } catch (Exception e) { 36 e.printStackTrace(); 37 } 38 } 39 }
xml解析——添加
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package cn.kgc.dom4jtest; 2 3 import org.dom4j.Document; 4 import org.dom4j.Element; 5 import org.dom4j.io.SAXReader; 6 import org.dom4j.io.XMLWriter; 7 8 import java.io.File; 9 import java.io.FileOutputStream; 10 import java.io.OutputStream; 11 12 /** 13 * 添加节点的操作 14 */ 15 public class AddTest { 16 public static void main(String[] args) { 17 SAXReader saxReader = new SAXReader(); 18 try { 19 Document document = saxReader.read("src/info.xml"); 20 //获取到根节点 21 Element rootElement = document.getRootElement(); 22 //添加一个子节点 23 Element brand = rootElement.addElement("brand"); 24 //给当前节点添加属性 25 brand.addAttribute("name","魅族"); 26 Element type = brand.addElement("type"); 27 type.addAttribute("name","s16"); 28 OutputStream os = new FileOutputStream(new File("src/info.xml")); 29 XMLWriter xmlWriter = new XMLWriter(os); 30 xmlWriter.write(rootElement); 31 xmlWriter.flush(); 32 xmlWriter.close(); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 } 37 }
xml解析——修改
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package cn.kgc.dom4jtest; 2 3 import org.dom4j.Document; 4 import org.dom4j.DocumentException; 5 import org.dom4j.Element; 6 import org.dom4j.io.SAXReader; 7 import org.dom4j.io.XMLWriter; 8 9 import java.io.*; 10 import java.util.Iterator; 11 12 /** 13 * 节点修改测试 14 */ 15 public class UpdateTest { 16 public static void main(String[] args) { 17 SAXReader saxReader = new SAXReader(); 18 try { 19 Document document = saxReader.read("src/info.xml"); 20 //获取根节点 21 Element rootElement = document.getRootElement(); 22 //获取子节点 23 Iterator it = rootElement.elementIterator(); 24 while (it.hasNext()){ 25 Element element = (Element) it.next(); 26 System.out.println(element.attributeValue("name")); 27 if (element.attributeValue("name").equals("魅族")){ 28 Iterator iterator = element.elementIterator(); 29 while (iterator.hasNext()){ 30 Element type = (Element) iterator.next(); 31 if (type.attributeValue("name").equals("s16")){ 32 type.addAttribute("name","16 pro"); 33 } 34 } 35 } 36 } 37 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(new File("src/info.xml"))); 38 xmlWriter.write(document); 39 xmlWriter.flush(); 40 xmlWriter.close(); 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 45 } 46 }
xml解析——删除
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package cn.kgc.dom4jtest; 2 3 import org.dom4j.Document; 4 import org.dom4j.DocumentException; 5 import org.dom4j.Element; 6 import org.dom4j.io.SAXReader; 7 import org.dom4j.io.XMLWriter; 8 9 import java.io.File; 10 import java.io.FileOutputStream; 11 import java.util.Iterator; 12 13 /** 14 * 删除节点 15 */ 16 17 public class DelTest { 18 public static void main(String[] args) { 19 SAXReader saxReader = new SAXReader(); 20 try { 21 Document document = saxReader.read("src/info.xml"); 22 Element rootElement = document.getRootElement(); 23 Iterator iterator = rootElement.elementIterator(); 24 while (iterator.hasNext()){ 25 Element brand = (Element) iterator.next(); 26 if(brand.attributeValue("name").equals("魅族")){ 27 //通过父节点来删除子节点 28 brand.getParent().remove(brand); 29 } 30 } 31 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(new File("src/info.xml"))); 32 xmlWriter.write(document); 33 xmlWriter.flush(); 34 xmlWriter.close(); 35 } catch (Exception e) { 36 e.printStackTrace(); 37 } 38 } 39 }