• DOM 操作XML(CRUD)


    <?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
    	<书>
    		<书名 name="dddd">C语言程序设计</书名>
    		<作者>张孝祥</作者>
    		<售价>40</售价>	
    	</书>
    	<书>
    		<书名>C++教程</书名>
    		<作者>自己</作者>
    		<售价>50</售价>	
    	</书>
    </书架>
    

      

    package com.gbx.it;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.StreamCorruptedException;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    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.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    public class XMLDemo {
    	public String path = "src/book.xml";
    	/*
    	 * 获得指定的Document
    	 */
    	public Document getDocument() throws ParserConfigurationException, SAXException, IOException {
    		//1: 获得dom解析工厂
    		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    		//2:获得dom解析
    		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    		//获得Document
    		Document document = documentBuilder.parse(path);
    		
    		return document;
    	}
    	/*
    	 * 将XML文件由内存写入硬盘
    	 */
    	public void refreshXML(Source xmlSource, Result outputTarget) throws TransformerException {
    		TransformerFactory factory = TransformerFactory.newInstance();
    		Transformer transformer = factory.newTransformer();
    		transformer.transform(xmlSource, outputTarget);
    	}
    	//   ----------R------------------
    	/*
    	 * 遍历DOM树
    	 */
    	@Test
    	public void read1() throws ParserConfigurationException, SAXException, IOException {
    		Document document = getDocument();
    		NodeList nodeList = document.getElementsByTagName("书架");
    		for (int i = 0; i < nodeList.getLength(); ++i) {
    			listNodes(nodeList.item(i));
    		}
    	}
    	private void listNodes(Node item) {
    		if (item instanceof Element) {
    			System.out.println(item.getNodeName()); 
    		}
    		NodeList nodeList = item.getChildNodes();
    		for (int i = 0; i < nodeList.getLength(); ++i) {
    			listNodes(nodeList.item(i));
    		}
    	}
    	/*
    	 * 读取标签内的内容 <书名 name="dddd">java web就业</书名>  
    	 */
    	@Test
    	public void read2() throws ParserConfigurationException, SAXException, IOException {
    		Document document = getDocument();
    		Element book = (Element) document.getElementsByTagName("书名").item(0);
    		String value = book.getTextContent();
    		System.out.println("书名: " + value);
    	}
    	/*
    	 * 读取标签的属性
    	 */
    	@Test
    	public void read3() throws ParserConfigurationException, SAXException, IOException {
    		Document document = getDocument();
    		Element book = (Element) document.getElementsByTagName("书名").item(0);
    		if (book.hasAttributes()) {
    			NamedNodeMap nodeMap = book.getAttributes();
    			for (int i = 0; i < nodeMap.getLength(); ++i) {
    				String attrName = nodeMap.item(i).getNodeName();
    				String attrValue = nodeMap.item(i).getNodeValue();
    				System.out.println("name : " + attrName + " value :" + attrValue);
    			}
    		}
    		
    		String value = book.getAttribute("name");
    		System.out.println(value);
    	}
    	// ----------------C-------------------
    	
    	/*
    	 * 添加标签  C
    	 */
    	//在指定标签的最后边添加标签
    	@Test
    	public void add1() throws ParserConfigurationException, SAXException, IOException, TransformerException {
    		Document document = getDocument();
    		Element book = (Element) document.getElementsByTagName("书").item(0);
    		Element newChild = document.createElement("你行");
    		newChild.setTextContent("嘿嘿");
    		book.appendChild(newChild);
    		
    		refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
    	}
    	//在指定标签的指定位置添加标签
    	@Test
    	public void add2() throws ParserConfigurationException, SAXException, IOException, TransformerException {
    		Document document = getDocument();
    		Element book = (Element) document.getElementsByTagName("书").item(0);
    		
    		Element newChild = document.createElement("你行");
    		newChild.setTextContent("嘿嘿");
    		
    		Element refChild = (Element) document.getElementsByTagName("售价").item(0);
    		
    		book.insertBefore(newChild, refChild);
    		
    		refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
    	}
    	//添加属性
    	@Test
    	public void add3() throws ParserConfigurationException, SAXException, IOException, TransformerException {
    		Document document = getDocument();
    		
    		Element e = (Element) document.getElementsByTagName("售价").item(0);
    		e.setAttribute("value", "RMB");
    		refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
    	}
    	//----------------D----------------
    	//删除标签
    	@Test
    	public void delElement() throws ParserConfigurationException, SAXException, IOException, TransformerException {
    		Document document = getDocument();
    		Element element = (Element) document.getElementsByTagName("你行").item(0);
    		element.getParentNode().removeChild(element);
    		refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
    	}
    	//删除标签的属性
    	
    	@Test
    	public void delAttr() throws ParserConfigurationException, SAXException, IOException, TransformerException {
    		Document document = getDocument();
    		Element element = (Element) document.getElementsByTagName("售价").item(0);
    		element.removeAttribute("value");
    		refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
    	}
    	//-------------U------------
    	@Test
    	public void update() throws ParserConfigurationException, SAXException, IOException, TransformerException {
    		Document document = getDocument();
    		Element element = (Element) document.getElementsByTagName("书名").item(0);
    		element.setTextContent("C语言程序设计");
    		refreshXML(new DOMSource(document), new StreamResult(new FileOutputStream(path)));
    	}
    }
    

      

    参考:方立勋老师视频

  • 相关阅读:
    asp.net mvc 下载文件 txt doc xsl 等等
    MySQL用户管理:添加用户、授权、删除用户、删除用户、修改用户密码
    Vue打包时Unknown plugin "external-helpers" in "xxx\.babelrc" at 0" 解决方案
    vue中Axios的封装
    Docker部署ASP.NET Core应用到Linux中bash脚本
    Linux CentOS7系统中安装Nodejs、cnpm、Git环境
    C#之获取PDF张数以及PDF转JPG
    C#Amr转MP3
    mysql 之C#使用insert批量插入时日期字段为null,插入报错解决方案
    Windows服务器共享文件,Linux服务器实现挂载共享文件
  • 原文地址:https://www.cnblogs.com/E-star/p/3491613.html
Copyright © 2020-2023  润新知