使用DOM方式对XML进行CRUD

DOM:将xml文档解析成对象和子对象(标签对象,属性对象)

缺点:占内存,如有必要需要修改虚拟机的运行内存

优点:CRUD容易操作


示例代码提示:用DOM方式对book.xml进行增删改查

book.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架>
	<书>
		<书名 name="XXX">红楼梦</书名>
		<作者>曹雪芹</作者>
		<售价>80元</售价>
	</书>
	
	<书>
		<书名>水浒传</书名>
		<作者>施耐庵</作者>
		<售价>60</售价>
	</书>
	 
</
Demo.java

import java.io.File;

import javax.print.Doc;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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

//使用dom方法对xml文档进行CRUD
public class Demo3 {

	// 读取xml中标签中的值
	@Test
	public void read1() throws Exception {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");

		NodeList list = document.getElementsByTagName("书名");
		Node node = list.item(1);
		String content = node.getTextContent();

		System.out.println(content);
	}

	// 得到XML中的所有标签
	@Test
	public void read2() throws Exception {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");

		// 得到根节点
		Node root = document.getElementsByTagName("书架").item(0);

		list(root);
	}

	private void list(Node node) {

		if (node instanceof Element) {
			System.out.println(node.getNodeName());
		}

		NodeList list = node.getChildNodes();
		for (int i = 0; i < list.getLength(); i++) {
			Node child = list.item(i);
			list(child);
		}
	}

	// 得到XML中的标签属性中的值
	@Test
	public void read3() throws Exception {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");

		Element element = (Element) document.getElementsByTagName("书名").item(0);
		String bookname = element.getAttribute("name");
		System.out.println(bookname);
	}

	// 向XML文档中添加节点:<售价>59.00元</售价>
	@Test
	public void add() throws Exception {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");

		// 创建节点
		Element element = document.createElement("售价");
		element.setTextContent("59.00元");

		// 把创建的节点挂到第一个节点上
		Element elt = (Element) document.getElementsByTagName("书").item(0);
		elt.appendChild(element);

		// 将更新后内存写会到XML文档
		TransformerFactory tffactory = TransformerFactory.newInstance();
		Transformer tf = tffactory.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult(new File(
				"src/book.xml")));
	}

	// 向XML文档指定位置添加节点:<售价>59.00元</售价>
	@Test
	public void add2() throws Exception {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/book.xml");

		// 创建节点
		Element element = document.createElement("售价");
		element.setTextContent("59.00元");

		//得到参考节点
		Element refNode = (Element) document.getElementsByTagName("售价").item(0);
		
		//得到要挂崽的节点
		Element book = (Element) document.getElementsByTagName("书").item(0);
		
		//往book指定位置插入崽
		book.insertBefore(element, refNode);
		
		// 将更新后内存写会到XML文档
		TransformerFactory tffactory = TransformerFactory.newInstance();
		Transformer tf = tffactory.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult(new File(
				"src/book.xml")));
	}
	
	// 向XML文档节点添加属性:<书名>红楼梦</书名> name = "XXX"属性
		@Test
		public void addAttr() throws Exception {

			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
		
			Element bookname = (Element) document.getElementsByTagName("书名").item(0);
			bookname.setAttribute("name", "XXX");
			
			TransformerFactory tffactory = TransformerFactory.newInstance();
			Transformer tf = tffactory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new File(
					"src/book.xml")));
		}
		
		@Test
		public void delete1() throws Exception{
			
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			//得到要删除的节点
			Element e = (Element) document.getElementsByTagName("售价").item(0);
			
			//得到要删除节点的爸爸
			Element father = (Element) document.getElementsByTagName("书").item(0);
			
			father.removeChild(e);
			
			TransformerFactory tffactory = TransformerFactory.newInstance();
			Transformer tf = tffactory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
		}
		
		@Test
		public void delete2() throws Exception{
			
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			//得到要删除的节点
			Element e = (Element) document.getElementsByTagName("售价").item(0);
			
			e.getParentNode().getParentNode().getParentNode().removeChild(e.getParentNode().getParentNode());
			
			TransformerFactory tffactory = TransformerFactory.newInstance();
			Transformer tf = tffactory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
		}
		
		//更新价格
		@Test
		public void update() throws Exception{
			

			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse("src/book.xml");
			
			Element e = (Element) document.getElementsByTagName("售价").item(0);
			e.setTextContent("110元");
			
			TransformerFactory tffactory = TransformerFactory.newInstance();
			Transformer tf = tffactory.newTransformer();
			tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
		}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值