用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"));
	}	
}

原文地址:https://www.cnblogs.com/runwind/p/4454731.html