真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

XML中DOM的示例分析

這篇文章主要介紹了XML中DOM的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是專業(yè)的小店網(wǎng)站建設(shè)公司,小店接單;提供網(wǎng)站制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行小店網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

XML編程-DOM

XML解析技術(shù)

xml解析技術(shù)常用的有兩類:dom解析和sax解析。

dom:(Document Object Model, 即文檔對象模型)是W3C組織推薦的處理XML的一種方式。

sax:(Simple API for XML)不是官方標(biāo)準(zhǔn),但它是XML社區(qū)事實(shí)上的標(biāo)準(zhǔn),幾乎所有的XML解析器都支持它。

Jaxp介紹

Jaxp(Java API for XML Processing)是Java對XML進(jìn)行編程的開發(fā)包,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包組成。

在 javax.xml.parsers包中,定義了幾個(gè)工廠類,程序員調(diào)用這些工廠類,可以得到對xml文檔進(jìn)行解析的 DOM 或 SAX 的解析器對象。

DOM基本概述

DOM(Document Object Model文檔對象模型),是W3C組織推薦的處理可擴(kuò)展標(biāo)志語言的標(biāo)準(zhǔn)編程接口。XML DOM 定義了所有 XML 元素的對象和屬性,以及訪問它們的方法(接口)。

原理圖

XML中DOM的示例分析

DOM模型(document object model)

DOM解析器在解析XML文檔時(shí),會(huì)把文檔中的所有元素,按照其出現(xiàn)的層次關(guān)系,解析成一個(gè)個(gè)Node對象(節(jié)點(diǎn))。

在dom中,節(jié)點(diǎn)之間關(guān)系如下:

1、位于一個(gè)節(jié)點(diǎn)之上的節(jié)點(diǎn)是該節(jié)點(diǎn)的父節(jié)點(diǎn)(parent)

2、一個(gè)節(jié)點(diǎn)之下的節(jié)點(diǎn)是該節(jié)點(diǎn)的子節(jié)點(diǎn)(children)

3、同一層次,具有相同父節(jié)點(diǎn)的節(jié)點(diǎn)是兄弟節(jié)點(diǎn)(sibling)

4、一個(gè)節(jié)點(diǎn)的下一個(gè)層次的節(jié)點(diǎn)集合是節(jié)點(diǎn)后代(descendant)

5、父、祖父節(jié)點(diǎn)及所有位于節(jié)點(diǎn)上面的,都是節(jié)點(diǎn)的祖先(ancestor)

Node對象

Node對象提供了一系列常量來代表結(jié)點(diǎn)的類型,當(dāng)開發(fā)人員獲得某個(gè)Node類型后,就可以把Node節(jié)點(diǎn)轉(zhuǎn)換成相應(yīng)的節(jié)點(diǎn)對象(Node的子類對象),以便于調(diào)用其特有的方法。(查看API文檔)

Node對象提供了相應(yīng)的方法去獲得它的父結(jié)點(diǎn)或子結(jié)點(diǎn)。編程人員通過這些方法就可以讀取整個(gè)XML文檔的內(nèi)容、或添加、修改、刪除XML文檔的內(nèi)容了。

PS:其子接口Element功能更多。

獲取Jaxp中的DOM解析器

1、調(diào)用DocumentBuilderFactory.newInstance()方法創(chuàng)建DOM解析器的工廠。

2、調(diào)用DocumentBuilderFactory對象的newDocumentBuilder()方法得到DOM解析器對象,其是DocumentBuilder的對象。

3、調(diào)用DocumentBuilder對象的parse()方法解析XML文檔,得到代表整個(gè)文檔的Document對象。

4、通過Document對象和一些相關(guān)類和方法,對XML文檔進(jìn)行操作。

更新XML文檔

javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉(zhuǎn)換為某種格式后進(jìn)行輸出,例如把xml文件應(yīng)用樣式表后轉(zhuǎn)成一個(gè)html文檔。利用這個(gè)對象,當(dāng)然也可以把Document對象又重新寫入到一個(gè)XML文件中。

Transformer類通過transform方法完成轉(zhuǎn)換操作,該方法接收一個(gè)源和一個(gè)目的地。我們可以通過:

javax.xml.transform.dom.DOMSource類來關(guān)聯(lián)要轉(zhuǎn)換的document對象,

用javax.xml.transform.stream.StreamResult 對象來表示數(shù)據(jù)的目的地。

Transformer對象通過TransformerFactory獲得。

案例:

XML5.xml

<班級 班次="1班" 編號="C1">
	<學(xué)生 地址="湖南" 學(xué)號="n1" 性別="男" 授課方式="面授" 朋友="n2" 班級編號="C1">
		<名字>張三
		<年齡>20
		<介紹>不錯(cuò)
	
	<學(xué)生 學(xué)號="n2" 性別="女" 授課方式="面授" 朋友="n1 n3" 班級編號="C1">
		<名字>李四
		<年齡>18

		<介紹>很好
	
	<學(xué)生 學(xué)號="n3" 性別="男" 授課方式="面授" 朋友="n2" 班級編號="C1">
		<名字>王五
		<年齡>22
		<介紹>非常好
	
	<學(xué)生 性別="男">
		<名字>小明
		<年齡>30
		<介紹>好
	
package com.pc;

import java.awt.List;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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 org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * 
 * @author Switch
 * @function Java解析XML
 * 
 */
public class XML5 {
	// 使用dom技術(shù)對xml文件進(jìn)行操作
	public static void main(String[] args) throws Exception {
		// 1.創(chuàng)建一個(gè)DocumentBuilderFactory對象
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
				.newInstance();
		// 2.通過DocumentBuilderFactory,得到一個(gè)DocumentBuilder對象
		DocumentBuilder documentBuilder = documentBuilderFactory
				.newDocumentBuilder();
		// 3.指定解析哪個(gè)xml文件
		Document document = documentBuilder.parse("src/com/pc/XML5.xml");
		// 4.對XML文檔操作
		// System.out.println(document);
		// list(document);
		// read(document);
		// add(document);
		// delete(document, "小明");
		update(document, "小明", "30");
	}

	// 更新一個(gè)元素(通過名字更新一個(gè)學(xué)生的年齡)
	public static void update(Document doc, String name, String age)
			throws Exception {
		NodeList nodes = doc.getElementsByTagName("名字");
		for (int i = 0; i < nodes.getLength(); i++) {
			Element nameE = (Element) nodes.item(i);
			if (nameE.getTextContent().equals(name)) {
				Node prNode = nameE.getParentNode();
				NodeList stuAttributes = prNode.getChildNodes();
				for (int j = 0; j < stuAttributes.getLength(); j++) {
					Node stuAttribute = stuAttributes.item(j);
					if (stuAttribute.getNodeName().equals("年齡")) {
						stuAttribute.setTextContent(age);
					}
				}
			}
		}
		updateToXML(doc);
	}

	// 刪除一個(gè)元素(通過名字刪除一個(gè)學(xué)生)
	public static void delete(Document doc, String name) throws Exception {
		// 找到第一個(gè)學(xué)生
		NodeList nodes = doc.getElementsByTagName("名字");
		for (int i = 0; i < nodes.getLength(); i++) {
			Node node = nodes.item(i);
			if (node.getTextContent().equals(name)) {
				Node prNode = node.getParentNode();
				prNode.getParentNode().removeChild(prNode);
			}
		}

		// 更新到XML
		updateToXML(doc);
	}

	// 添加一個(gè)學(xué)生到XML文件
	public static void add(Document doc) throws Exception {
		// 創(chuàng)建一個(gè)新的學(xué)生節(jié)點(diǎn)
		Element newStu = doc.createElement("學(xué)生");
		newStu.setAttribute("性別", "男");
		Element newStu_name = doc.createElement("名字");
		newStu_name.setTextContent("小明");
		Element newStu_age = doc.createElement("年齡");
		newStu_age.setTextContent("21");
		Element newStu_intro = doc.createElement("介紹");
		newStu_intro.setTextContent("好");
		newStu.appendChild(newStu_name);
		newStu.appendChild(newStu_age);
		newStu.appendChild(newStu_intro);
		// 把新的學(xué)生節(jié)點(diǎn)添加到根元素
		doc.getDocumentElement().appendChild(newStu);

		// 更新到XML
		updateToXML(doc);

	}

	// 更新到XML
	private static void updateToXML(Document doc)
			throws TransformerFactoryConfigurationError,
			TransformerConfigurationException, TransformerException {
		// 得到TransformerFactory對象
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		// 通過TransformerFactory對象得到一個(gè)轉(zhuǎn)換器
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(doc), new StreamResult(
				"src/com/pc/XML5.xml"));
	}

	// 具體查詢某個(gè)學(xué)生的信息(小時(shí)第一個(gè)學(xué)生的所有)
	public static void read(Document doc) {
		NodeList nodes = doc.getElementsByTagName("學(xué)生");
		// 取出第一個(gè)學(xué)生
		Element stu1 = (Element) nodes.item(0);
		Element name = (Element) stu1.getElementsByTagName("名字").item(0);
		System.out.println("姓名:" + name.getTextContent() + " 性別:"
				+ stu1.getAttribute("性別"));
	}

	// 遍歷該XML文件
	public static void list(Node node) {
		if (node.getNodeType() == node.ELEMENT_NODE) {
			System.out.println("名字:" + node.getNodeName());
		}
		// 取出node的子節(jié)點(diǎn)
		NodeList nodes = node.getChildNodes();
		for (int i = 0; i < nodes.getLength(); i++) {
			// 顯示所有子節(jié)點(diǎn)
			Node n = nodes.item(i);
			list(n);
		}
	}

}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“XML中DOM的示例分析”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!


網(wǎng)頁名稱:XML中DOM的示例分析
當(dāng)前URL:http://weahome.cn/article/pdcpis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部