W3C 使用jaxp對xml文件遍歷增刪改查小實例

集合:xml元素之增刪改查加遍歷     使用jaxp

運行結果

 person.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
   <p1>
        <name>zhangsan</name>
        <age>20</age>
        </p1>
   
   <p1>
        <name>xiaoquan</name>
        <age>21</age>
   </p1>
</person>

 

TestJaxp.java

package cn.test.jaxptes;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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;
import org.w3c.dom.Text;

public class TestJaxp {

	public static void main(String[] args) throws Exception {
		addSex();
		listElement();
		modifySex();
		listElement();
		selectSingle();
		selectAll();
		DelectSex();
		listElement();
	}

	public static Document getDocument() throws Exception {
		/*
		 * 1. 創建解析器工廠 2. 根據解析器工廠創建解析器 3. 解析xml 返回 document
		 */
		// 創建解析器工廠
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory
				.newInstance();
		// 創建解析器
		DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
		// 解析
		Document document = documentBuilder.parse("src/person.xml");
		return document;
	}

	// 遍歷結點 把所有元素名打印出來
	public static void listElement() throws Exception {
		/*
		 * 1得到 document ----使用遞歸來實現----- 2. 得到根節點 3. 得到根節點的子節點 4. 得到根節點的子節點的子節點
		 */
		listIt(getDocument());
		System.out.println();

	}

	private static void listIt(Node node) {
		// 判斷爲元素類型的時候纔打印
		if (node.getNodeType() == Node.ELEMENT_NODE) {
			System.out.print(node.getNodeName() + "   ");
		}
		NodeList list = node.getChildNodes();
		for (int i = 0; i < list.getLength(); i++) {
			Node node1 = list.item(i);
			// 繼續得到node1的子節點
			listIt(node1);
		}

	}

	// 刪除<sex></sex>節點
	public static void DelectSex() throws Exception {
		/*
		 * 1得到 document 2. 得到sex 3. 獲取sex父節點 4. 使用父節點刪除 removeChild方法 5. 回寫xml
		 */
		// 得到sex元素
		Document document = getDocument();
		Node sex1 = document.getElementsByTagName("sex").item(0);
		// 得到sex1父節點
		Node p1 = sex1.getParentNode();
		// 刪除操作
		p1.removeChild(sex1);
		// 回寫
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/person.xml"));

	}

	// 修改第一個p1下面的sex內容爲nan
	public static void modifySex() throws Exception {
		/*
		 * 1 得到 document 2. 得到sex item方法 3. 修改sex裏面的值 setTextContent 方法 4. 回寫xml
		 */
		// 得到所有的sex元素
		Document document = getDocument();
		NodeList list = document.getElementsByTagName("sex");
		// 使用下標 得到第一個sex元素
		Node sex1 = list.item(0);
		sex1.setTextContent("nan");
		// 回寫
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/person.xml"));

	}

	// 在第一個p1 下面 添加<sex>nv</sex>
	public static void addSex() throws Exception {
		/*
		 * 1得到 document 2. 得到第一個p1 得到所有p1,使用item方法下標得到 3. 創建sex標籤 createELement
		 * 創建文本createTextNode 4. 把文本添加到sex下面 appendChild 5. 把sex添加到p1下面 6.
		 * 回寫到xml文件裏面
		 */
		Document document = getDocument();
		// 得到所有的p1元素
		NodeList list = document.getElementsByTagName("p1");
		// 使用下標 得到第一個p1元素
		Node p1 = list.item(0);
		// 創建sex標籤 createELement 創建文本createTextNode
		Element sex1 = document.createElement("sex");
		Text tex1 = document.createTextNode("nv");
		// 把文本添加到sex下面
		sex1.appendChild(tex1);
		// 把sex添加到p1下面
		p1.appendChild(sex1);
		// 回寫
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/person.xml"));
	}

	// 查詢xml中 第一個name 元素的值
	public static void selectSingle() throws Exception {
		/*
		 * 1得到 document 2. 獲得doucument 下所有的name元素 list 3. 用item方法 下標獲取具體的元素 4.
		 * 得到具體的值, 使用getTextContent方法
		 */
		Document document = getDocument();
		// 得到name元素
		NodeList list = document.getElementsByTagName("name");
		// 使用下標 得到第一個元素
		Node name1 = list.item(0);
		// 得到name裏面具體的值
		String s1 = name1.getTextContent();
		System.out.println("挑選一個:" + s1);
	}

	// 查詢xml內 所有name元素的值
	public static void selectAll() throws Exception {
		/*
		 * 1得到 document 2. 獲得doucument 下 所有的name元素 list 3. 遍歷 list
		 */
		// 得到name元素
		NodeList list = getDocument().getElementsByTagName("name");
		// 遍歷
		System.out.println("遍歷所有:");
		for (int i = 0; i < list.getLength(); i++) {
			// 得到name
			Node name1 = list.item(i);
			// 輸出 name 裏面的值
			String s = name1.getTextContent();
			System.out.println(s);
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章