日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

DOM解析XML

發(fā)布時(shí)間:2024/4/11 asp.net 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DOM解析XML 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解析的定義:簡(jiǎn)單的說(shuō)就是提取XML文檔中指定的數(shù)據(jù)。


我們知道,用Java解析XML文檔,最常用的有兩種方法:


(1)使用基于事件的XML簡(jiǎn)單API(Simple API for XML)稱為SAX。

(2)基于樹(shù)和節(jié)點(diǎn)的文檔對(duì)象模型(Document Object Module)稱為DOM。


? ?Sun公司提供了Java API for XML Parsing(JAXP)接口來(lái)使用SAX和DOM,通過(guò)JAXP,我們可以使用任何與JAXP兼容的XML解析器。對(duì)于DOM解析XML文檔來(lái)說(shuō),實(shí)際上是解析DOM形成的DOM樹(shù)。

?


? ?DOM為基于開(kāi)發(fā)XML的應(yīng)用提供了便利,它通過(guò)隨機(jī)訪問(wèn)機(jī)制,使得應(yīng)用程序利用該接口可以在任何時(shí)候訪問(wèn)XML文檔中任何一部分?jǐn)?shù)據(jù),也可以對(duì)XML文檔中的數(shù)據(jù)進(jìn)行插入,刪除,修改,移動(dòng)等操作,在DOM中文檔的類型類似于一棵樹(shù)。文檔,文檔中的根,元素,元素內(nèi)容,屬性,屬性值等都是以對(duì)象模型出現(xiàn)的。DOM的優(yōu)點(diǎn)在于它在內(nèi)存組合能夠保存文檔的整個(gè)模型,然而,對(duì)于大型文檔來(lái)說(shuō),這樣做可能不方便,因?yàn)樗赡軙?huì)用盡內(nèi)存,或者當(dāng)系統(tǒng)到達(dá)它的極限時(shí),機(jī)器的性能會(huì)慢下來(lái)。


? ? SAX提供了一種對(duì)XML文檔進(jìn)行順序訪問(wèn)的模式,這是一種快速讀取XML數(shù)據(jù)的方式,SAX接口是事件驅(qū)動(dòng),當(dāng)使用SAX分析器對(duì)XML文檔進(jìn)行分析時(shí),就會(huì)觸發(fā)一系列事件,并激活相應(yīng)的事件處理函數(shù),從而完成對(duì)XML文檔的訪問(wèn),SAX處理XML的方式與DOM不同,SAX解析器不是將DOM樹(shù)解析和表現(xiàn)為輸出,他是基于事件的,所以在XML文檔被解析時(shí),事件被發(fā)送給引擎。SAX可以在文檔的開(kāi)始接收事件,也可以接受文檔中的元素,使用這些事件可以構(gòu)建一種結(jié)構(gòu)。因?yàn)镾AX沒(méi)有把文檔完全的加載到內(nèi)存中,所以需要的系統(tǒng)資源較少,可以高效分析大型XML文檔,缺點(diǎn)是,SAX編寫(xiě)比DOM復(fù)雜,因?yàn)槭紫葘?shí)現(xiàn)通知接口并維護(hù)狀態(tài),其次SAX不允許對(duì)文檔進(jìn)行隨機(jī)訪問(wèn),也沒(méi)有提供修改功能。



DOM的編程API:


1.節(jié)點(diǎn)(Node):Node接口是整個(gè)文檔對(duì)象模型的主要數(shù)據(jù)類型,他表示文檔中的單個(gè)節(jié)點(diǎn),當(dāng)實(shí)現(xiàn)Node接口的所有對(duì)象公開(kāi)處理子節(jié)點(diǎn)的方法時(shí),不是實(shí)現(xiàn)Node接口的所有對(duì)象的子節(jié)點(diǎn)。


2.Document:Document接口表示整個(gè)HTML或XML文檔,他是文檔樹(shù)的根,并提供對(duì)數(shù)據(jù)的基本訪問(wèn),因?yàn)槲谋竟?jié)點(diǎn),元素,注釋,處理指令等不能存在于Document的上下文之外,所以Document接口還包含所需的創(chuàng)建這些對(duì)象的方法。


3.NodeList:NodeList接口提供對(duì)節(jié)點(diǎn)的有序集合的抽象,沒(méi)有定義和約束如何實(shí)現(xiàn)此集合,DOM中的NodeList對(duì)象是活動(dòng)的。


4.NamedNodeMap:NamedNodeMap接口的對(duì)象用于表示可以通過(guò)名稱訪問(wèn)的節(jié)點(diǎn)的集合,需要注意的是NamedNodeMap不從NodeList繼承,不以任何特定的順序維護(hù)NamedNodeMap,在實(shí)現(xiàn)NamedNodeMap的對(duì)象中包含的對(duì)象還可以通過(guò)對(duì)象索引的方法進(jìn)行訪問(wèn)。


5.Element:表示一個(gè)程序元素,比如包、類或者方法,每個(gè)元素都表示一個(gè)靜態(tài)的語(yǔ)言初級(jí)構(gòu)造。



DOM解析例子:


對(duì)下面的XML文檔進(jìn)行解析

<?xml version="1.0" encoding="GBK"?> <addresslist><linkman><name>Jack</name><id>10011</id><school>NEFU</school><tel>454655465</tel><mybook>DOM解析</mybook></linkman> </addresslist>

那么利用Java解析代碼如下

import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*;public class DOM{public static void main(String[] args) throws Exception{//獲取DOM解析的工廠DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //獲取解析器 DocumentBuilder builder = factory.newDocumentBuilder(); //把XML文檔輸入到解析器中,并獲取XML文檔對(duì)應(yīng)的Document對(duì)象 Document doc = builder.parse(new File("src//DOM.xml")); NodeList list = doc.getElementsByTagName("linkman");for(int i=0;i<list.getLength();i++){Element e = (Element)list.item(i);System.out.println(e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());System.out.println(e.getElementsByTagName("id").item(0).getFirstChild().getNodeValue());System.out.println(e.getElementsByTagName("school").item(0).getFirstChild().getNodeValue());System.out.println(e.getElementsByTagName("tel").item(0).getFirstChild().getNodeValue());System.out.println(e.getElementsByTagName("mybook").item(0).getFirstChild().getNodeValue());}} }

總結(jié)

以上是生活随笔為你收集整理的DOM解析XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。