• 用DOM方式解析XML(使用JAXP工具)第一天


    要解析XML文件,首先要获得XML的DOM树,方法如下:
    	//获取DOM解析器工
    	//DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    	//获取DOM解析器
    	//DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    	//用DOM解析器解析XML,并生成DOM树
    	//Document document = documentBuilder.parse("src/book.xml");
    
    
    XML文档如下:
    <?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
    	<书 大小="非常非常大">
    		<书名>Java就业培训教程</书名>
    		<作者>张孝详</作者>
    		<批发价>8元</批发价>
    		<售价>28.0元</售价>		
    	</书>
    	<书 大小="猪肉">
    		<书名>JavaScript从入门到精通</书名>
    		<作者>戴振良</作者>
    		<售价>88.00元</售价>
    	</书>
    </书架>
    
    需要:
    //	1、得到某个具体的节点内容
    	//打印第2本书的作者元素的主体内容
            //Document.getElementsByTagName(String tagName);获取元素列表
    	//NodeList.item(int index);获取元素列表中的某个节点
    	//Node.getTextContent();获取节点主体内容
    //	2、遍历所有元素节点(用递归)
    	//Node.getNodeType();获取节点类型
    	//node.getNodeName();获取节点名称
    	//node.getChildNodes();获取子节点列表
    //	3、修改某个元素节点的主体内容
    	//修改第2个售价节点的内容
    	//Node.setTextContent();设置节点主体内容
    	//注:设置后要把DOM写回XML文件
    	//凡是set(设置)操作的,设置的是内存里的DOM树,需要把这个树写回文件,方法如下:
    	//TransformerFactory transformerFactory = TransformerFactory.newInstance();
    	//		Transformer transformer = transformerFactory.newTransformer();
    	//		transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    //	4、向指定元素节点中增加子元素节点
    	//在第1本书中增加子元素节点,<内部价>58.00元</内部价>
    	//Document.createElement();创建元素
    	//Node.appendChild();增加元素到子节点
    //	5、向指定元素节点上增加同级元素节点
    	//在第一本书的售价前面插入<批发价>10</批发价>
    	//Node.insertBefore(新元素,);插入一个新元素到子节点前面
    //	6、删除指定元素节点
    	//删除内部价
    	//Node.removeChild(子节点);删除指定的子节点
    	//把DOM写回XML文件
    //	7、操作XML文件属性
    	//获取第一个“书”的“大小”的属性值
    	//Element.getAttribute();获取属性
    //	8、操作XML文件属性
    	//设置第一个“书”的“大小”的属性值\
    	//Element.setAttribute(属性名,属性值);
    
    
    
    
    package com.itheima;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    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.NodeList;
    import org.w3c.dom.Node;
    
    public class JaxpCRUD {
    	public static void main(String[] args) throws Exception {
    		//获取DOM解析器工厂,以便生产解析器
    		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    		//获取DOM解析器,以便解析DOM
    		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    		//解析DOM
    		Document document = documentBuilder.parse("src/book.xml");
    		//test01(document);
    //		test02(document);
    //		test03(document);
    //		test04(document);
    //		test05(document);
    //		test06(document);
    //		test07(document);
    		test08(document);
    	}
    //	1、得到某个具体的节点内容
    	//打印第2本书的作者元素的主体内容
    	private static void test01(Document document) throws Exception {
    		
    		NodeList list = document.getElementsByTagName("作者");
    //		System.out.println(list.getLength());
    		Node node = list.item(1);
    		String content = node.getTextContent();//获取主体内容
    		System.out.println(content);
    	}
    //	2、遍历所有元素节点
    	private static void test02(Node node) {
    		if(node.ELEMENT_NODE==node.getNodeType())
    			System.out.println(node.getNodeName());
    		if(node.hasChildNodes()) {
    			NodeList nodeList = node.getChildNodes();
    			for(int i=0;i<nodeList.getLength();i++)
    				test02(nodeList.item(i));
    		}
    	}
    //	3、修改某个元素节点的主体内容
    	private static void test03(Document document) throws Exception {
    		Node price = document.getElementsByTagName("售价").item(1);
    		price.setTextContent("88.00元");
    		TransformerFactory transformerFactory = TransformerFactory.newInstance();
    		Transformer transformer = transformerFactory.newTransformer();
    		transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    	}
    //	4、向指定元素节点中增加子元素节点
    	////在第1本书中增加子元素节点,<内部价>58.00元</内部价>
    	private static void test04(Document document) throws Exception {
    		//获得第一个 书节点
    		Node bookNode = document.getElementsByTagName("书").item(0);
    		//创建一个元素,并设置主体内容
    		Element innerPriceElement = document.createElement("内部价");
    		innerPriceElement.setTextContent("12.00元");
    		//把元素增加到节点,即成为了元素节点		
    		bookNode.appendChild(innerPriceElement);
    		 //把DOM写回XML文件
    		TransformerFactory transformerFactory = TransformerFactory.newInstance();
    		Transformer transformer = transformerFactory.newTransformer();
    		transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    	}
    //	5、向指定元素节点上增加同级元素节点
    	//在第一本书的售价前面插入<批发价>10</批发价>
    	private static void test05(Document document) throws Exception{
    		//得到每一个售价
    		Node salePriceNode = document.getElementsByTagName("售价").item(0);
    		//创建新元素,并设置主体内容
    		Element wholesaleElement = document.createElement("批发价");
    		wholesaleElement.setTextContent("8元");
    		//把新元素增加到节点
    		salePriceNode.getParentNode().insertBefore(wholesaleElement, salePriceNode);
    		//把DOM写回XML文件
    		TransformerFactory transformerFactory = TransformerFactory.newInstance();
    		Transformer transformer = transformerFactory.newTransformer();
    		transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    	}
    //	6、删除指定元素节点
    	////删除内部价
    	//把DOM写回XML文件
    	private static void test06(Document document) throws Exception {
    		//获得内部价节点
    		Node innerPriceNode = document.getElementsByTagName("内部价").item(0);
    		//删除内部节点
    		innerPriceNode.getParentNode().removeChild(innerPriceNode);
    		TransformerFactory transformerFactory = TransformerFactory.newInstance();
    		Transformer transformer = transformerFactory.newTransformer();
    		transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    	}
    //	7、操作XML文件属性
    	//获取第一个“书”的“大小”的属性值
    	private static void test07(Document document){
    		Node bookNode = document.getElementsByTagName("书").item(0);
    		Element bookElement = (Element)bookNode;
    		String attrValue = bookElement.getAttribute("大小");
    		System.out.println(attrValue);
    	}
    //	8、操作XML文件属性
    	//设置第一个“书”的“大小”的属性值
    	private static void test08(Document document) throws Exception{
    		Node bookNode = document.getElementsByTagName("书").item(0);
    		Element bookElement = (Element)bookNode;
    		bookElement.setAttribute("大小","非常非常大");
    		
    		TransformerFactory tf = TransformerFactory.newInstance();
    		Transformer t = tf.newTransformer();
    		t.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    	}	
    }

  • 相关阅读:
    Keepalived安装使用详解
    Django缓存使用方法
    Django常用命令及参数配置(Django 1.8.6)
    Python之Rpyc模块
    Hadoop:实战Web日志分析
    Hadoop:使用Mrjob框架编写MapReduce
    Hadoop:使用原生python编写MapReduce
    Hadoop安装
    LGOJP1850 换教室
    BZOJ4318: OSU!
  • 原文地址:https://www.cnblogs.com/runwind/p/4454731.html
Copyright © 2020-2023  润新知