解析XML-DOM-增删改查

本文介绍了一个Java程序如何读取、创建、更新及保存XML文档的方法。通过实例演示了使用DocumentBuilderFactory和DocumentBuilder来解析XML文件,并展示了如何进行节点的添加、修改与删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package lzh.xml.cn;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Xmltest3 {
	public static void main(String[] args) throws Exception {
		// step1: 获得Dom解析工厂实例
		DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
		// step2: 获得Dom解析器
		DocumentBuilder dbuilder = dbfactory.newDocumentBuilder();
		// step3: 获取要解析的文件,缓存到内存中
		Document document = dbuilder.parse("books.xml");

		// UpdateXml(document);
		// DeleteXml(document);
		CreateXml(document);
		SaveXml(document);

	}

	private static void DeleteXml(Document document) {
		// 删除 id=b001节点
		NodeList bookList = document.getElementsByTagName("book");
		for (int n = 0; n < bookList.getLength(); n++) {
			// 获得每一本书
			Node bookNode = bookList.item(n);
			// 获得id
			Element bookElement = (Element) bookNode;
			String id = bookElement.getAttribute("id");

			// 判断id == b001
			if ("b001".equals(id)) {
				// 删除bookElement 当前节点,调用父节点,进行操作
				// 获得父节点
				Node parent = bookElement.getParentNode();
				// 操作
				parent.removeChild(bookElement);
			}
		}
	}

	private static void CreateXml(Document document) {
		// 将document的内容修改,添加
		// 添加
		//获取root根节点
		Element rootElement = document.getDocumentElement();
		//创建book元素
		Element newBook = document.createElement("book");
		//设置id属性
		newBook.setAttribute("id", "b003");
		//创建子节点
		Element titleNode = document.createElement("title");
		Element priceNode = document.createElement("price");
		titleNode.setTextContent("测试添加");
		priceNode.setTextContent("99");
		newBook.appendChild(titleNode);
		newBook.appendChild(priceNode);
		
		//将元素添加到 
		rootElement.appendChild(newBook);
	}
	
	private static void UpdateXml(Document document) {
		// 将document的内容修改,添加、删除、修改
		// 修改 <title>Java 核心技术</title> --》 Java123
		NodeList bookList = document.getElementsByTagName("book");
		for (int n = 0; n < bookList.getLength(); n++) {
			// 获得每一本书
			Node bookNode = bookList.item(n);
			// 获得id
			Element bookElement = (Element) bookNode;
			String id = bookElement.getAttribute("id");

			// 判断id == b001
			if ("b001".equals(id)) {
				// 获得所有子节点
				NodeList childList = bookElement.getElementsByTagName("title");
				Node title = childList.item(0);

				// 设置更新值
				title.setTextContent("Java123");
			}

		}
	}

	private static void SaveXml(Document document) throws Exception {
		// 将内存中的document,另存为books.jasp.xml,持久化,写操作

		// 获得持久化工厂实例
		TransformerFactory tfactory = TransformerFactory.newInstance();
		// 获得持久化对象
		Transformer transformer = tfactory.newTransformer();
		// 源: document,将document封装到Source
		Source xmlSource = new DOMSource(document);
		// 目标: books.jasp.xml
		Result outputTarget = new StreamResult("books.jasp.xml");
		transformer.transform(xmlSource, outputTarget);

		System.out.println("写完成!!!dome!!!");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值