亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XML中JAXP的示例分析

發布時間:2021-09-17 15:22:38 來源:億速云 閱讀:92 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關XML中JAXP的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

根據一個CRUD的案例,對JAXP解析xml技術,進行詳細的解釋:

首先,已知一個xml文件中的數據如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<書架>
	<書 出版社="深圳出版社1"><!-- 出版社="深圳出版社1"屬性名和屬性值 -->
		<書名>Java</書名>
		<作者>張澤華</作者>
		<售價>39.00元</售價>
	</書>
	<書 出版社="深圳出版社2">
		<書名>JavaScript網頁開發</書名>
		<作者>李紅蕾</作者>
		<售價>28.00元</售價>
	</書>
</書架>

然后根據單元測試的形式,對CRUD分別寫在一個測試框架方法里面。以方便測試代碼正確性。

package com.itheima.dom;

import java.io.IOException;

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.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import junit.framework.Assert;

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

/*
 * 
 * 			使用 xml  dom 對xml 文件進行 CRUD操作 
 * 
 1.讀取節點的文本內容
 2.讀取屬性值
 3.添加節點
 4.刪除節點
 5.更新節點
 6.打印所有元素節點的名稱.
 protected的方法,不讓new對象

 * 
 */
public class TestDomExercises {

	// 讀取節點的文本內容 : Java就業培訓教程
	@Test
	public void testReadContent() throws Exception {// 測試框架異常需要拋出

		// 獲得代表xml 文件的document 對象

		Document document = getDocument();

		// 根據標簽名 獲得 名的標簽的 節點 列表
		NodeList nl= document.getElementsByTagName("書名");

		int length = nl.getLength();

		System.out.println("長度 : " + length);

		// 返回第一個 書名 節點
		Node firstBookNameNode = nl.item(0);

		String result = firstBookNameNode.getTextContent();//String getTextContent()  此屬性返回此節點及其后代的文本內容。 

		Assert.assertEquals("Java", result);
	}

	// 2.讀取屬性值 : 出版社="深圳出版社1"
	@Test
	public void testReadAttribute() throws Exception {

		// 獲得document 對象
		Document document = getDocument();

		NodeList nl = document.getElementsByTagName("書");

		// 拿到 第一本書的 節點 對象
		// Node firstBookNode = nl.item(0);

		// 注意:這里查看api 之后, 發現Node里面沒有【根據 屬性名獲得屬性值】的方法,而 元素 element 有 直接【根據 屬性名獲得屬性值】的方法, 而這里 拿到的 實際上就是
		// 一個 元素 Node節點, 所以 這里 想到了強制類型 轉換 , 轉換為 元素Element , 然后 根據他的方法的屬性名獲得屬性的值

		// 拿到 第一本書
		//nl.item(0)返回Node對象,向下轉型成Element對象。因為Element里面有直接根據元素找值得方法:getAttribute("出版社");根據名稱獲取屬性的值
		Element firstBookElement = (Element) nl.item(0);

		//String getAttribute(String name) 通過名稱獲得屬性值。 
		String result = firstBookElement.getAttribute("出版社");//根據屬性名獲取屬性值

		Assert.assertEquals("深圳出版社1", result);

	}

	// 3.添加節點 : <售價>79.00元</售價>
	@Test
	public void testAddPrice() throws Exception, SAXException, IOException {

		// 獲得document 對象
		Document document = getDocument();

		// 獲得第一本書 節點
		Node firstBookNode = document.getElementsByTagName("書").item(0);

		// 創建 售價 節點, 并且將 文本設置為 79.00元
		//Element org.w3c.dom.Document.createElement(String tagName)
		//Element createElement(String tagName) 創建指定類型的元素。 
		Element createPriceElement = document.createElement("售價");
		//
		createPriceElement.setTextContent("79.00元");//<售價>79.00元</售價>

		//Node org.w3c.dom.Node.appendChild(Node newChild) 
		firstBookNode.appendChild(createPriceElement);//將節點 newChild 添加到此節點的子節點列表的末尾。如果 newChild 已經存在于樹中,則首先移除它。

		writeBack2Xml(document);

	}

	/*
	 * 回去寫代碼時, 如果碰到這個 異常 :
	 * 
	 * initializationError(org.junit.runner.manipulation.Filter)
	 * 
	 * 就是 你 沒有 加 @Test 注解
	 */

	// 4.刪除節點: <售價>39.00元</售價>
	@Test
	public void testDelete() throws Exception, SAXException, IOException {

		// 獲得 document 對象
		Document document = getDocument();

		// 獲得 售價 39.00元的 節點
		NodeList priceNodeList = document.getElementsByTagName("售價");

		for (int i = 0; i < priceNodeList.getLength(); i++) {

			// 拿到 每個售價節點
			Node node = priceNodeList.item(i);

			if ("39.00元".equals(node.getTextContent())) {

				// 如果進來, 則說明找到 39.00元的售價節點
				// 拿到當前節點的父節點, 然后 刪除 這個 節點
				node.getParentNode().removeChild(node);

			}
		}

		// 更新 到 xml 文件
		writeBack2Xml(document);

	}

	// 5.更新節點 : <售價>79.00元</售價> ---------->> <售價>9.9元</售價>
	public void testUpdatePrice() {

	}

	// 6.打印所有元素節點的名稱.

	@Test
	public void testPrintAllElementsName() throws Exception, SAXException,
			IOException {

		// 獲得document 對象
		Document document = getDocument();

		printAllElementsName(document);
	}

	public void printAllElementsName(Node node) {

		if (Node.ELEMENT_NODE == node.getNodeType()) {

			// 說明 就是 元素 節點
			System.out.println(node.getNodeName());
		}

		NodeList childNodes = node.getChildNodes();

		for (int i = 0; i < childNodes.getLength(); i++) {

			// 拿到 遍歷過程中的 每一個 node
			Node item = childNodes.item(i);

			printAllElementsName(item);
		}
	}

	// 需要將內存中的document 對象 重新寫回到 xml 文件中去
	private void writeBack2Xml(Document document)
			throws TransformerFactoryConfigurationError,
			TransformerConfigurationException, TransformerException {

		// 如何弄?
		// 查看 文檔, transformerFacotry --->> Transformer實例

		TransformerFactory factory = TransformerFactory.newInstance();

		// 獲得轉換器的 實例對象
		Transformer transformer = factory.newTransformer();

		// 調用 轉換方法 將 內存中document 對象 寫到 xml 文件中 去
		//abstract  void transform(Source xmlSource, Result outputTarget) 將 XML Source 轉換為 Result。 
		//DOMSource正好是Source實現類。而且它有構造方法DOMSource(Node n) 正好接收一個Node
		//Result實現類有一個StreamResult他的構造方法StreamResult.StreamResult(String systemId)
// systemId:Must be a String that conforms to the URI syntax
		//因此源Source,和結果Result都解決了
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/book.xml"));
	}

	// 抽取 方法 (右鍵——>>refactor--->>rctract method)--->> 重構 -- 抽取 方法
	private Document getDocument() throws ParserConfigurationException,
			SAXException, IOException {
		// 1. 獲得工廠
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

		// 2. 獲得 builder 對象
		DocumentBuilder builder = factory.newDocumentBuilder();

		// 3. 拿到 代表xml 文件的document 對象
		Document document = builder.parse("src/book.xml");
		return document;
	}

}

感謝各位的閱讀!關于“XML中JAXP的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃江县| 洪雅县| 大名县| 巍山| 错那县| 吴堡县| 墨竹工卡县| 游戏| 乌兰浩特市| 绍兴县| 西宁市| 民县| 和顺县| 衢州市| 孟州市| 岐山县| 板桥市| 武宁县| 济阳县| 息烽县| 独山县| 彭山县| 衡阳县| 密山市| 东乌珠穆沁旗| 株洲县| 邳州市| 封开县| 合江县| 旺苍县| 正定县| 望都县| 黑龙江省| 烟台市| 盘锦市| 林甸县| 曲靖市| 福鼎市| 武功县| 青冈县| 聊城市|