java w3c xml_org.w3c.dom(java dom)解析XML文檔

首先來了解點Java DOM 的 API:

1.解析器工廠類:DocumentBuilderFactory

創建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

2.解析器:DocumentBuilder

創建方法:通過解析器工廠類來獲得?DocumentBuilder db = dbf.newDocumentBuilder();

3.文檔樹模型Document

創建方法:a.通過xml文檔?Document doc = db.parse("bean.xml");??b.將需要解析的xml文檔轉化為輸入流?InputStream is = new FileInputStream("bean.xml");

Document doc = db.parse(is);

Document對象代表了一個XML文檔的模型樹,所有的其他Node都以一定的順序包含在Document對象之內,排列成一個樹狀結構,以后對XML文檔的所有操作都與解析器無關,

直接在這個Document對象上進行操作即可;

包含的方法:

642bc78e57e0d1066a610c8b9f343732.png

496cca0f18dd885f76f26dee65b7f672.png

bccfd63ca9184b076d9da1cf3e5fe6cc.png

4.節點列表類NodeList

NodeList代表了一個包含一個或者多個Node的列表,根據操作可以將其簡化的看做為數組

afb75a3b661318fb1aff65789f7441e4.png

5.節點類Node

Node對象是DOM中最基本的對象,代表了文檔樹中的抽象節點。但在實際使用中很少會直接使用Node對象,而是使用Node對象的子對象Element,Attr,Text等

6.元素類Element

是Node類最主要的子對象,在元素中可以包含屬性,因而Element中有存取其屬性的方法

293d6f2f0f437b9c84223b47ca682d0f.png

3e3cc22f4d60805bc52ce9eb6d7ad20b.png

7.屬性類Attr

代表某個元素的屬性,雖然Attr繼承自Node接口,但因為Attr是包含在Element中的,但并不能將其看做是Element的子對象,因為Attr并不是DOM樹的一部分

基本的知識就到此結束,更加具體的大家可以參閱JDK API文檔

實戰:

1.使用DOM來遍歷XML文檔中的全部內容并且插入元素:

school.xml文檔:

沈浪

1006010022

信管2

浙江杭州3

123456

沈1

1006010033

信管1

浙江杭州4

234567

沈2

1006010044

生工2

浙江杭州1

345678

沈3

1006010055

電子2

浙江杭州2

456789

DomDemo.java

1   packagexidian.sl.dom;2 importjava.io.FileOutputStream;3

4 importjavax.xml.parsers.DocumentBuilder;5 importjavax.xml.parsers.DocumentBuilderFactory;6

7 importorg.apache.crimson.tree.XmlDocument;8 importorg.w3c.dom.Document;9 importorg.w3c.dom.Element;10 importorg.w3c.dom.NodeList;11

12

13 public classDomDemo {14 /**

15 * 遍歷xml文檔16 **/

17 public static voidqueryXml(){18 try{19 //得到DOM解析器的工廠實例

20 DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();21 //從DOM工廠中獲得DOM解析器

22 DocumentBuilder dbBuilder =dbFactory.newDocumentBuilder();23 //把要解析的xml文檔讀入DOM解析器

24 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");25 System.out.println("處理該文檔的DomImplementation對象 = "+doc.getImplementation());26 //得到文檔名稱為Student的元素的節點列表

27 NodeList nList = doc.getElementsByTagName("Student");28 //遍歷該集合,顯示結合中的元素及其子元素的名字

29 for(int i = 0; i< nList.getLength() ; i ++){30 Element node =(Element)nList.item(i);31 System.out.println("Name: "+ node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());32 System.out.println("Num: "+ node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());33 System.out.println("Classes: "+ node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());34 System.out.println("Address: "+ node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());35 System.out.println("Tel: "+ node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());36 }37

38 }catch(Exception e) {39 //TODO: handle exception

40 e.printStackTrace();41 }42 }43 /**

44 * 向已存在的xml文件中插入元素45 **/

46 public static voidinsertXml(){47 Element school = null;48 Element student = null;49 Element name = null;50 Element num = null;51 Element classes = null;52 Element address = null;53 Element tel = null;54 try{55 //得到DOM解析器的工廠實例

56 DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();57 //從DOM工廠中獲得DOM解析器

58 DocumentBuilder dbBuilder =dbFactory.newDocumentBuilder();59 //把要解析的xml文檔讀入DOM解析器

60 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");61 //得到文檔名稱為Student的元素的節點列表

62 NodeList nList = doc.getElementsByTagName("School");63 school = (Element)nList.item(0);64 //創建名稱為Student的元素

65 student = doc.createElement("Student");66 //設置元素Student的屬性值為231

67 student.setAttribute("examId", "23");68 //創建名稱為Name的元素

69 name = doc.createElement("Name");70 //創建名稱為 香香 的文本節點并作為子節點添加到name元素中

71 name.appendChild(doc.createTextNode("香香"));72 //將name子元素添加到student中

73 student.appendChild(name);74 /**

75 * 下面的元素依次加入即可76 **/

77 num = doc.createElement("Num");78 num.appendChild(doc.createTextNode("1006010066"));79 student.appendChild(num);80

81 classes = doc.createElement("Classes");82 classes.appendChild(doc.createTextNode("眼視光5"));83 student.appendChild(classes);84

85 address = doc.createElement("Address");86 address.appendChild(doc.createTextNode("浙江溫州"));87 student.appendChild(address);88

89 tel = doc.createElement("Tel");90 tel.appendChild(doc.createTextNode("123890"));91 student.appendChild(tel);92

93 //將student作為子元素添加到樹的根節點school

94 school.appendChild(student);95 //將內存中的文檔通過文件流生成insertSchool.xml,XmlDocument位于crison.jar下

96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/insertSchool.xml"));97 System.out.println("成功");98 }catch(Exception e) {99 //TODO: handle exception

100 e.printStackTrace();101 }102 }103 public static voidmain(String[] args){104 //讀取

105 DomDemo.queryXml();106 //插入

107 DomDemo.insertXml();108 }109 }110

運行后結果:

75aacd23bbe45164f17e4677667a9a28.png

然后到目錄下查看生成的xml文件:

ccf8f27a4b20d2000b0cfaa0dcce6e49.png

打開查看內容:

984444b4a8c4c6b41eee36edcb35eb64.png

上面添加元素后輸出的文件與之前的文件不是同一個文件,如果需要輸出到原文件中,那么只要將路徑改為原文間路徑即可:src/xidian/sl/dom/school.xml

2.創建XML過程與插入過程相似,就是Document需要創建

packagexidian.sl.dom;importjava.io.FileOutputStream;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.apache.crimson.tree.XmlDocument;importorg.w3c.dom.Document;importorg.w3c.dom.Element;public classCreateNewDom {/*** 創建xml文檔

**/

public static voidcreateDom(){

Document doc;

Element school,student;

Element name= null;

Element num= null;

Element classes= null;

Element address= null;

Element tel= null;try{//得到DOM解析器的工廠實例

DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();//從DOM工廠中獲得DOM解析器

DocumentBuilder dbBuilder =dbFactory.newDocumentBuilder();//創建文檔樹模型對象

doc =dbBuilder.newDocument();if(doc != null){//創建school元素

school = doc.createElement("School");//創建student元素

student = doc.createElement("Student");//設置元素Student的屬性值為231

student.setAttribute("examId", "23");//創建名稱為Name的元素

name = doc.createElement("Name");//創建名稱為 香香 的文本節點并作為子節點添加到name元素中

name.appendChild(doc.createTextNode("香香"));//將name子元素添加到student中

student.appendChild(name);/*** 下面的元素依次加入即可

**/num= doc.createElement("Num");

num.appendChild(doc.createTextNode("1006010066"));

student.appendChild(num);

classes= doc.createElement("Classes");

classes.appendChild(doc.createTextNode("眼視光5"));

student.appendChild(classes);

address= doc.createElement("Address");

address.appendChild(doc.createTextNode("浙江溫州"));

student.appendChild(address);

tel= doc.createElement("Tel");

tel.appendChild(doc.createTextNode("123890"));

student.appendChild(tel);//將student作為子元素添加到樹的根節點school

school.appendChild(student);//添加到文檔樹中

doc.appendChild(school);//將內存中的文檔通過文件流生成insertSchool.xml,XmlDocument位于crison.jar下

((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/createSchool.xml"));

System.out.println("創建成功");

}

}catch(Exception e) {//TODO: handle exception

e.printStackTrace();

}

}public static voidmain(String[] args) {

CreateNewDom.createDom();

}

}

運行結果:

9eb239bdd82be4c66d69bf6e53393c45.png

DOM的操作應該還是非常簡單明了的,掌握了沒哦。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534241.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534241.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534241.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中小數點位數_Java中限制小數位數問題

在Java中限制小數位數的方法不止一種&#xff0c;下面我們以限制兩位小數為例來說明幾種限制小數位數的方法&#xff0c;其他位數可以以此類推方式一&#xff1a;四舍五入double f 111231.5585;BigDecimal b new BigDecimal(f);double f1 b.setScale(2,…

orange pi java_[中文]Orange Pi家族各大成員一覽表

全部復制來自官網&#xff0c;只修改了錯別字和優化了排版。Orange Pi Zero香橙派Zero是一款開源的單板電腦&#xff0c;新一代的arm開發板,它可以運行Android4.4、Ubuntu、Debian等操作系統。香橙派Zero使用全志H2系統級芯片&#xff0c;同時擁有256MB/512MB DDR3 內存(256MB為…

java 微服務源碼_基于Java的微服務架構源碼案例Abixen

微服務越來越受歡迎&#xff0c;每個月都有更多的庫包和解決方案來支持微服務的開發測試&#xff0c;很多Java開發人員雖然聽說過微服務&#xff0c;但是真正采用還是有猶豫的&#xff1a;“我知道&#xff0c;微服務是非常棒的&#xff0c;微服務器更容易維護和進一步開發&…

rocketmq java例子_SpringBoot和RocketMQ的簡單實例

1&#xff0c;引用jar包build.gradle文件添加jar包引用compile group: org.apache.rocketmq, name: rocketmq-spring-boot-starter, version: 2.1.12&#xff0c;配置文件application.properties 配置文件spring.application.nameapp-dempserver.port8081###rocketmq###rocketm…

mysql migrations_Code First Migrations更新數據庫結構(數據遷移)

背景 code first起初當修改model后&#xff0c;要持久化至數據庫中時&#xff0c;總要把原數據庫給刪除掉再創建(DropCreateDatabaseIfModelChanges)&#xff0c;此時就會產生一個問題&#xff0c;當我們的舊數據庫中包含一些測試數據時&#xff0c;當持久化更新后&#xff0c;…

java 機器碼 虛擬機_Java虛擬機:源碼到機器碼

無論什么語言寫的代碼&#xff0c;其到最后都是通過機器碼運行的&#xff0c;無一例外。那么對于 Java 語言來說&#xff0c;其從源代碼到機器碼&#xff0c;這中間到底發生了什么呢&#xff1f;這就是今天我們要聊的。如下圖所示&#xff0c;編譯器可以分為&#xff1a;前端編…

docker 遠程連接 文件看不到_開發提升十倍生產力: IDEA 遠程一鍵部署 Spring Boot 到 Docker...

一、開發前準備二、新建項目《Java 2019 超神之路》《Dubbo 實現原理與源碼解析 —— 精品合集》《Spring 實現原理與源碼解析 —— 精品合集》《MyBatis 實現原理與源碼解析 —— 精品合集》《Spring MVC 實現原理與源碼解析 —— 精品合集》《Spring Boot 實現原理與源碼解析…

java多臺_Java 多態

Java中多態的特性&#xff0c;在學習中就是很難懂&#xff0c;比較抽象的概念。學的時候就犯糊涂&#xff0c;但日后會發現&#xff0c;基礎在日常工作的理解中占有重要的角色。下面&#xff0c;我將用一個代碼實例&#xff0c;回憶和鞏固多態的概念和存在的意義。理解多態&…

快準牌電腦發軟件_做自媒體必備技能,視頻剪輯軟件排名(精品篇)

作者&#xff1a;老馬引流定位&#xff1a;專業專注引流推廣0X00 前言毫不客氣的說&#xff0c;視頻正日益成為社交媒體和營銷的重要組成部分&#xff0c;有越來越多的人參與到視頻剪輯當中來&#xff0c;而其中最為關鍵的就是視頻剪輯軟件。而市面上的視頻剪輯軟件當然也是五花…

ad電阻原理圖_【雕爺學編程】Arduino動手做(2)---光敏電阻模塊

【Arduino】108種傳感器模塊系列實驗&#xff08;02&#xff09;實驗二&#xff1a;光敏電阻傳感器模塊我手里這塊是三針版的&#xff0c;挺秀氣吧光敏電阻是用硫化隔或硒化隔等半導體材料制成的特殊電阻器&#xff0c;其工作原理是基于內光電效應。光照愈強&#xff0c;阻值就…

java從url下載文件_Java從URL下載文件

在這篇文章中將學習如何從java下載URL中的文件。使用java.net.URL openStream()方法從java程序中的URL下載文件。也可以使用Java NIO Channels或Java IO InputStream從URL打開流中讀取數據&#xff0c;然后將它保存到文件中。下面是從指定URL下載的簡單Java程序。它演示了如何在…

怎么判斷一個字符串的最長回文子串是否在頭尾_LeetCode 第 131 號問題:分割回文串...

題目來源于 LeetCode 上第 131 號問題&#xff1a;分割回文串。題目難度為 Medium&#xff0c;目前通過率為 45.8% 。題目描述給定一個字符串 s&#xff0c;將 s 分割成一些子串&#xff0c;使每個子串都是回文串。返回 s 所有可能的分割方案。示例:輸入題目解析首先&#xff0…

java的地位_Java地位無可動搖的12個原因

如今&#xff0c;面對曾經在程序員中被各種新技術掩蓋直至堙滅的技術值得懷念。猶如COBOL這當年被老程序員們尊為神器的語言如今也基本沒有價值。而Java作為現代程序員的中堅力量在這點上會不會成為下一個COBOL&#xff1f;有關JAVA的技術賣出多少本書已經是一個很久遠的記憶了…

hystrix threadpool coresize_Hystrix斷路器 - 求知若渴的蝸牛

Hystrix介紹在微服務場景中&#xff0c;通常會有很多層的服務調用。如果一個底層服務出現問題&#xff0c;故障會被向上傳播給用戶。我們需要一種機制&#xff0c;當底層服務不可用時&#xff0c;可以阻斷故障的傳播。這就是斷路器的作用。他是系統服務穩定性的最后一重保障。在…

ionic保存到mysql_ionic sqlite 存取數據封裝(兼容真機與webkit瀏覽器)

不管是真機還是H5&#xff0c;都有提供sqlite數據庫進行存儲數據。那么我們只要封裝好函數就能隨意調用了。如果只是存儲簡單的鍵值對形式的話&#xff0c;ionic官網也提供了一個兼容網頁的storage&#xff0c;https://ionicframework.com/docs/storage&#xff0c;但只能key/v…

sql plus 表的總記錄數是多少_直播回顧 | 億級并發絲毫不虛,TDSQL-SQL引擎是如何煉成的...

騰訊云數據庫國產數據庫專題線上技術沙龍正在火熱進行中&#xff0c;3月19日唐顥的分享已經結束&#xff0c;沒來得及參與的小伙伴不用擔心&#xff0c;以下就是直播的視頻和文字回顧。關注“騰訊云數據庫”公眾號&#xff0c;回復“0319唐顥”&#xff0c;即可下載直播分享PPT…

java plug機制_插件機制 - OpooPress - 基于 Java 的靜態博客生成器

插件機制通過插件機制可以很容易的擴展 OpooPress 博客系統的功能。 Plugin 定義如下public interface Plugin{/**** param registry*/void initialize(Registry registry);}Registry 接口定義如下&#xff1a;public interface Registry {Site getSite();void registerConvert…

運放放大倍數計算公式_19.運算放大器的特性與應用,不得不掌握的知識點(一)...

運算放大器&#xff0c;簡稱“運放”&#xff0c;是電力電子中最重要的器件之一&#xff0c;主要作用為&#xff1a;信號放大、信號運算、信號處理、波形的產生和變換。一、運算放大器的內部結構集成運算放大器內部結構集成運算放大器內部一般由四個單元組成&#xff0c;各單元…

java選項設置_java環境配置

javac無法執行檢查&#xff1a;看看java 相關的java相關路徑有沒有多余的符號&#xff0c;比如多出分號&#xff0c;逗號(筆者上面是正確的路徑展示形式)Win10下 Java環境變量配置首先&#xff0c;你應該已經安裝了 Java 的 JDK 了(如果沒有安裝JDK&#xff0c;請跳轉到此網址&…

teleport 組件的作用_人臉識別綜述! 覆蓋人臉檢測,預處理和特征表示三大核心組件!...

The Elements of End-to-end Deep Face Recognition: A Survey of Recent Advances 人臉識別是計算機視覺社區中最基礎和歷史悠久的話題之一。隨著深度卷積網絡和大尺度數據集發展&#xff0c;深度人臉識別取得極大進步并且應用到許多領域。給定一個自然圖像或者視頻幀作為輸入…