使用dom4j对xml文件进行增、删、改、查

dom4j进行CRUD的操作基本上只需要分为四步骤,

           1.获取解析器

           2.解析XML获取代表整个文档的dom对象

           3.获取根节点

           4.利用根节点进行CRUD操作。

实现的代码如下:

/**
	 * 查找XML中的子元素
	 * */
	@Test
	public void dom4JSelect()throws Exception{
		//1.获取解析器
		SAXReader reader=new SAXReader();
		//2.解析XML获取代表整个文档的dom对象
		org.dom4j.Document document=reader.read("../MyXml.xml");
		//3.获取根节点
		Element root=document.getRootElement();
		//4.获取需要的标签的内容,dom4j不可以跨标签执行操作,需要循序查找标签
		String bookName=root.element("书").element("书名").getText();
		//只执行一次,即如果有多个书名的标签它一次性只查一个
		System.out.println("书名--"+bookName);
		
		//拿到根节点以下所有的子标签
		List list=root.elements();
		//拿到根节点的子标签列表中的第二个标签,这里根节点是“书架”它的子节点就是“书”,
		//即就是拿到第二个标签内容为“书”的标签
		Element bookEl2=list.get(1);
		String bookName2=bookEl2.element("书名").getText();
		System.out.println("书名--"+bookName2);
	}

	/**
	 * 向XML中添加子元素
	 * */
	@Test
	public void dom4JAdd()throws Exception{
		//1.获取解析器
		SAXReader reader=new SAXReader();
		//2.解析XML获取代表整个文档的dom对象
		org.dom4j.Document document=reader.read("../MyXml.xml");
		//3.获取根节点
		Element root=document.getRootElement();
		//创建节点,设置标签体
		Element element=DocumentHelper.createElement("特价");
		//给节点设置内容
		element.setText("40.0元");
		//获取创建的节点的父节点,即需要将新的节点挂载在哪一个节点的下面
		Element bookEle=root.element("书");
		//将创建的节点添加进去
		bookEle.add(element);
		
		//将内存中的dom树回写到文件中,更新文件
//		FileWriter fileWriter=new FileWriter("../day01/WebRoot/Jsp/MyXml.xml");
//		document.write(fileWriter);
//		fileWriter.flush();
//		fileWriter.close();
		
		//将内存中的dom树回写到文件中,更新文件  更好用,
		//OutputFormat.createPrettyPrint()帮助输出文件时格式化文件,美观
		XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("../MyXml.xml"),OutputFormat.createPrettyPrint());
		xmlWriter.write(document);
		xmlWriter.close();
	}

/**
	 * 修改XML中子元素内容
	 * */
	@Test
	public void dom4JUpdate()throws Exception{
		//1.获取解析器
		SAXReader reader=new SAXReader();
		//2.解析XML获取代表整个文档的dom对象
		org.dom4j.Document document=reader.read("../MyXml.xml");
		//3.获取根节点
		Element root=document.getRootElement();
		//获取需要修改的标签并将其内容修改
		root.element("书").element("特价").setText("4.0元");
		//将内存中的dom树回写到文件中,更新文件  更好用,
		//OutputFormat.createPrettyPrint()帮助输出文件时格式化文件,美观
		XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("../MyXml.xml"),OutputFormat.createPrettyPrint());
		xmlWriter.write(document);
		xmlWriter.close();
	}

/**
	 * 删除XML中子元素
	 * */
	@Test
	public void dom4JDelete()throws Exception{
		//1.获取解析器
		SAXReader reader=new SAXReader();
		//2.解析XML获取代表整个文档的dom对象
		org.dom4j.Document document=reader.read("../MyXml.xml");
		//3.获取根节点
		Element root=document.getRootElement();
		
		//删除的思路:找到要删除的标签,用该标签获取到它的父元素,通过它的父元素删除它
		Element bookEle=root.element("书").element("特价");
		bookEle.getParent().remove(bookEle);
		
		//将内存中的dom树回写到文件中,更新文件  更好用,
		//OutputFormat.createPrettyPrint()帮助输出文件时格式化文件,美观
		XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("../MyXml.xml"),OutputFormat.createPrettyPrint());
		xmlWriter.write(document);
		xmlWriter.close();
	}



<书架> 
  <书> 
    <书名>如果AI拥有了思想  
    <作者>XX  
    <售价>140 
    
  <书> 
    <书名>人类是否完全依赖于AI  
    <作者>SS  
    <售价>170 
   



你可能感兴趣的:(xml)