黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java讀取xml文件內(nèi)容的方法

Java讀取xml文件內(nèi)容的方法

更新時(shí)間:2022-12-05 11:31:34 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2814次

在 Java 中讀取 XML 文件與讀取其他文件(如 .docx 和 .txt)有很大不同,因?yàn)?XML 文件包含標(biāo)簽之間的數(shù)據(jù)。Java 提供了許多解析 XML 文件讀取的方法。Java 中有兩個(gè)解析器可以解析 XML 文件:

Java DOM解析器

Java SAX解析器

Java DOM 解析器

DOM API提供了讀取和寫入 XML 文件的類。我們可以使用 DOM API 創(chuàng)建、刪除、修改和重新排列節(jié)點(diǎn)。DOM 解析器解析整個(gè) XML 文件并在內(nèi)存中創(chuàng)建一個(gè)DOM對(duì)象。它以樹結(jié)構(gòu)對(duì)XML 文件進(jìn)行建模,以便于遍歷和操作。在 DOM 中,XML 文件中的所有內(nèi)容都是一個(gè)節(jié)點(diǎn)。該節(jié)點(diǎn)表示 XML 文件的一個(gè)組件。DOM 解析器在將 XML 文件加載到內(nèi)存中時(shí),處理速度很慢并且占用大量?jī)?nèi)存。

我們一定是按照 Java 讀取 XML 文件的流程:

實(shí)例化 XML 文件: DOM 解析器將 XML 文件加載到內(nèi)存中,并將每個(gè)標(biāo)簽視為一個(gè)元素。

獲取根節(jié)點(diǎn): Document類提供了getDocumentElement()方法來獲取根節(jié)點(diǎn)和XML文件的元素。

獲取所有節(jié)點(diǎn): getElementByTagName ()方法從 XML 文件中檢索所有特定的標(biāo)簽名稱。其中ELEMENT_NODE類型是指具有子元素的非文本節(jié)點(diǎn)。如果我們需要從頭開始訪問所有節(jié)點(diǎn),包括根節(jié)點(diǎn),我們可以遞歸調(diào)用getChildElement()方法。

按文本值獲取節(jié)點(diǎn):我們可以使用getElementByTextValue()方法按值搜索節(jié)點(diǎn)。

通過屬性值獲取節(jié)點(diǎn):如果我們想通過特定屬性的值搜索節(jié)點(diǎn),我們可以使用 getElementByTagName() 方法和 getAttribute() 方法。

使用 Eclipse 在 Java 中讀取 XML 文件的步驟

第 1 步:創(chuàng)建一個(gè)簡(jiǎn)單的Java項(xiàng)目。

第 2 步:創(chuàng)建類文件并提供類文件名。我們已經(jīng)創(chuàng)建了名為ReadXMLFileExample1的類文件。

第 3 步:編寫如下代碼。

第 4 步:下載dom-2.3.0-jaxb-1.0.6.jar文件:?jiǎn)螕舸颂?..

第 5 步:在項(xiàng)目中創(chuàng)建一個(gè)lib文件夾。

第 6 步:復(fù)制dom-2.3.0-jaxb-1.0.6.jar文件并粘貼到 lib 文件夾中。

第 7 步:設(shè)置類路徑:

右擊項(xiàng)目->Build Path->Configure Build Path->Add External JARs->選擇JAR文件->點(diǎn)擊Open按鈕->Apply and Close。

第 8 步:創(chuàng)建XML文件。我們創(chuàng)建了一個(gè)名為XMLFile.xml的 XML 文件,并將以下數(shù)據(jù)寫入其中。

第 9 步:運(yùn)行項(xiàng)目。

創(chuàng)建 XML 文件:XMLFile.xml

<?xml version="1.0"?>  
<class>  
    <student>  
        <id>101</id>  
        <firstname>Naman</firstname>  
        <lastname>Kumar</lastname>  
        <subject>Math</subject>  
        <marks>83</marks>  
    </student>        
    <student>  
        <id>102</id>  
        <firstname>Kapil</firstname>  
        <lastname>Kumar</lastname>  
        <subject>Chemistry</subject>  
        <marks>60</marks>  
    </student>    
    <student>  
        <id>103</id>  
        <firstname>Harsh</firstname>  
        <lastname>Singh</lastname>  
        <subject>English</subject>  
        <marks>70</marks>  
    </student>    
    <student>  
        <id>104</id>  
        <firstname>Jitesh</firstname>  
        <lastname>Singh</lastname>  
        <subject>Physics</subject>  
        <marks>76</marks>  
    </student>    
</class>  

使用 DOM Parser 讀取 XML 文件的示例

import javax.xml.parsers.DocumentBuilderFactory;  
import javax.xml.parsers.DocumentBuilder;  
import org.w3c.dom.Document;  
import org.w3c.dom.NodeList;  
import org.w3c.dom.Node;  
import org.w3c.dom.Element;  
import java.io.File;  
public class ReadXMLFileExample1  
{  
public static void main(String argv[])   
{  
try   
{  
//creating a constructor of file class and parsing an XML file  
File file = new File("F:\\XMLFile.xml");  
//an instance of factory that gives a document builder  
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
//an instance of builder to parse the specified xml file  
DocumentBuilder db = dbf.newDocumentBuilder();  
Document doc = db.parse(file);  
doc.getDocumentElement().normalize();  
System.out.println("Root element: " + doc.getDocumentElement().getNodeName());  
NodeList nodeList = doc.getElementsByTagName("student");  
// nodeList is not iterable, so we are using for loop  
for (int itr = 0; itr < nodeList.getLength(); itr++)   
{  
Node node = nodeList.item(itr);  
System.out.println("\nNode Name :" + node.getNodeName());  
if (node.getNodeType() == Node.ELEMENT_NODE)   
{  
Element eElement = (Element) node;  
System.out.println("Student id: "+ eElement.getElementsByTagName("id").item(0).getTextContent());  
System.out.println("First Name: "+ eElement.getElementsByTagName("firstname").item(0).getTextContent());  
System.out.println("Last Name: "+ eElement.getElementsByTagName("lastname").item(0).getTextContent());  
System.out.println("Subject: "+ eElement.getElementsByTagName("subject").item(0).getTextContent());  
System.out.println("Marks: "+ eElement.getElementsByTagName("marks").item(0).getTextContent());  
}  
}  
}   
catch (Exception e)   
{  
e.printStackTrace();  
}  
}  
}  

輸出

Root element: class
Node Name: student
Student id: 101
First Name: Naman
Last Name: Kumar
Subject: Math
Marks: 83
Node Name: student
Student id: 102
First Name: Kapil
Last Name: Kumar
Subject: Chemistry
Marks: 60
Node Name: student
Student id: 103
First Name: Harsh
Last Name: Singh
Subject: English
Marks: 70
Node Name: student
Student id: 104
First Name: Jitesh
Last Name: Singh
Subject: Physics
Marks: 76

讓我們看另一個(gè)讀取 xml 文件的例子。

使用 DOM Parser 讀取 XML 文件的示例

以下示例讀取同一個(gè) XML 文件XMLFile.xml,并展示如何逐一循環(huán)節(jié)點(diǎn)。它打印節(jié)點(diǎn)值、名稱和屬性(如果有)。

例子

導(dǎo)入 java.io.文件;  
導(dǎo)入 javax.xml.parsers.DocumentBuilder;  
導(dǎo)入 javax.xml.parsers.DocumentBuilderFactory;  
導(dǎo)入 org.w3c.dom.Document;  
導(dǎo)入 org.w3c.dom.NamedNodeMap;  
導(dǎo)入 org.w3c.dom.Node;  
導(dǎo)入 org.w3c.dom.NodeList;  
公共類 ReadXMLFileExample2   
{  
public static void  main(String[] args)    
{  
嘗試   
{  
文件 file =  new  File( "F:\\XMLFile.xml" );  
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();  
文檔 document = documentBuilder.parse(file);  
System.out.println( "根元素: " + document.getDocumentElement().getNodeName());  
如果 (文檔.hasChildNodes())   
{  
printNodeList(document.getChildNodes());  
}  
}   
抓住 (例外 e)  
{  
System.out.println(e.getMessage());  
}  
}  
private static void  printNodeList(NodeList 節(jié)點(diǎn)列表)    
{  
for  ( int  count =  0 ; count < nodeList.getLength(); count++)   
{  
節(jié)點(diǎn) elemNode = nodeList.item(count);  
如果 (elemNode.getNodeType() == Node.ELEMENT_NODE)   
{  
// 獲取節(jié)點(diǎn)名稱和值  
System.out.println( "\n節(jié)點(diǎn)名稱 = "  + elemNode.getNodeName()+  " [OPEN]" );  
System.out.println( "節(jié)點(diǎn)內(nèi)容 = "  + elemNode.getTextContent());  
如果 (elemNode.hasAttributes())   
{  
NamedNodeMap nodeMap = elemNode.getAttributes();  
for  ( int  i =  0 ; i < nodeMap.getLength(); i++)   
{  
節(jié)點(diǎn)node = nodeMap.item(i);  
System.out.println( "屬性名稱:"  + node.getNodeName());  
System.out.println( "屬性值:"  + node.getNodeValue());  
}  
}  
如果 (elemNode.hasChildNodes())   
{  
//如果節(jié)點(diǎn)有子節(jié)點(diǎn)則遞歸調(diào)用  
printNodeList(elemNode.getChildNodes());  
}  
System.out.println( "節(jié)點(diǎn)名稱 = "  + elemNode.getNodeName()+  " [CLOSE]" );  
}  
}  
}  
}  

輸出

根元素:class
節(jié)點(diǎn)名稱 =class [OPEN]
節(jié)點(diǎn)內(nèi)容 = 	
		101 
		Naman 
		Kumar 
		Maths 
		83 	
		102 
		Kapil 
		Kumar 
		Chemistry 
		60 	
		103 
		Harsh 
		Singh 
		English 
		70 	
		104 
		Jitesh 
		Singh 
		Physics 
		76	
節(jié)點(diǎn)名稱 =student [OPEN]
節(jié)點(diǎn)內(nèi)容 = 
		101 
		Naman 
		Kumar 
		Maths 
		83	
節(jié)點(diǎn)Name =id [OPEN] 
Node Content =101 
Node Name =id [CLOSE] 
Node Name =firstname [OPEN] 
Node Content =Naman
節(jié)點(diǎn)名稱 =firstname [關(guān)閉]
節(jié)點(diǎn)名稱 =lastname [打開]
節(jié)點(diǎn)內(nèi)容 =Kumar
節(jié)點(diǎn)名稱 =lastname [關(guān)閉]
節(jié)點(diǎn)名稱 =subject [打開]
節(jié)點(diǎn)內(nèi)容 =Math
節(jié)點(diǎn)名稱 =subject [關(guān)閉]
節(jié)點(diǎn)名稱 =marks [打開]
節(jié)點(diǎn)內(nèi)容 =83
節(jié)點(diǎn)名稱 =marks [關(guān)閉]
節(jié)點(diǎn)名稱 =student [關(guān)閉]
節(jié)點(diǎn)名稱 =student [打開]
節(jié)點(diǎn)內(nèi)容 = 
		102 
		Kapil 
		Kumar 
		Chemistry 
		60	
節(jié)點(diǎn)名稱 =id [打開]
節(jié)點(diǎn)內(nèi)容 =102
節(jié)點(diǎn)名稱 =id [關(guān)閉] ] 
Node Name =firstname [OPEN] 
Node Content =Kapil 
Node Name =firstname [CLOSE] 
Node Name =lastname [OPEN]
節(jié)點(diǎn)內(nèi)容=Kumar
節(jié)點(diǎn)名稱=lastname [CLOSE]
節(jié)點(diǎn)名稱=subject [OPEN]
節(jié)點(diǎn)內(nèi)容=Chemistry
節(jié)點(diǎn)名稱=subject [CLOSE]
節(jié)點(diǎn)名稱=marks [OPEN]
節(jié)點(diǎn)內(nèi)容=60
節(jié)點(diǎn)名稱=marks [CLOSE]
節(jié)點(diǎn)名稱= student [CLOSE]
節(jié)點(diǎn)名稱 =student [OPEN]
節(jié)點(diǎn)內(nèi)容 = 
		103 
		Harsh 
		Singh 
		English 
		70	
節(jié)點(diǎn)名稱 =id [OPEN]
節(jié)點(diǎn)內(nèi)容 =103
節(jié)點(diǎn)名稱 =id [CLOSE]
節(jié)點(diǎn)名稱 =firstname [OPEN]
節(jié)點(diǎn)內(nèi)容 =Harsh
節(jié)點(diǎn)名稱=firstname [CLOSE] 
Node Name =lastname [OPEN] 
Node Content =Singh 
Node Name =lastname [關(guān)閉]
節(jié)點(diǎn)名稱=subject [OPEN]
節(jié)點(diǎn)內(nèi)容=English
節(jié)點(diǎn)名稱=subject [CLOSE]
節(jié)點(diǎn)名稱=marks [OPEN]
節(jié)點(diǎn)內(nèi)容=70
節(jié)點(diǎn)名稱=marks [CLOSE]
節(jié)點(diǎn)名稱=student [CLOSE]
節(jié)點(diǎn)名稱=student [OPEN]
節(jié)點(diǎn)內(nèi)容= 
		104 
		Jitesh 
		Singh 
		Physics 
		76	
節(jié)點(diǎn)名稱=id [打開]
節(jié)點(diǎn)內(nèi)容=104
節(jié)點(diǎn)名稱=id [關(guān)閉]
節(jié)點(diǎn)名稱=名字[打開]
節(jié)點(diǎn)內(nèi)容=Jitesh
節(jié)點(diǎn)名稱=名字[關(guān)閉]
節(jié)點(diǎn)名稱=姓氏[打開] ]
節(jié)點(diǎn)內(nèi)容 =Singh
節(jié)點(diǎn)名稱 =姓氏 [關(guān)閉]
節(jié)點(diǎn)名稱 =主題 [打開]
節(jié)點(diǎn)內(nèi)容 =物理
節(jié)點(diǎn)名稱=subject [CLOSE]
節(jié)點(diǎn)名稱=marks [OPEN]
節(jié)點(diǎn)內(nèi)容=76
節(jié)點(diǎn)名稱=marks [CLOSE]
節(jié)點(diǎn)名稱=student [CLOSE]
節(jié)點(diǎn)名稱=class [CLOSE]

Java SAX 解析器

Java SAX 解析器代表Simple API for XML。SAX 解析器逐行解析 XML 文件。它在遇到 xml 文件中的開始標(biāo)記、結(jié)束標(biāo)記和字符數(shù)據(jù)時(shí)觸發(fā)事件。SAX 解析器也稱為基于事件的解析器。

SAX 解析器不會(huì)將任何 XML 文件加載到內(nèi)存中。它不創(chuàng)建 XML 文檔的任何對(duì)象表示。SAX 解析器使用回調(diào)函數(shù)通知客戶端 XML 文檔結(jié)構(gòu)。它比 DOM 解析器更快并且使用更少的內(nèi)存。

SAX 是 XML 的流式接口,這意味著 XML 文件按順序解析,從文檔頂部開始,到根元素結(jié)束為止。

使用 SAX 解析器讀取 XML 文件的示例

導(dǎo)入 javax.xml.parsers.SAXParser;  
導(dǎo)入 javax.xml.parsers.SAXParserFactory;  
導(dǎo)入 org.xml.sax.Attributes;  
導(dǎo)入 org.xml.sax.SAXException;  
導(dǎo)入 org.xml.sax.helpers.DefaultHandler;  
公共類 ReadXMLFileExample3   
{  
public static void  main(String args[])     
{  
嘗試   
{  
SAXParserFactory factory = SAXParserFactory.newInstance();  
SAXParser saxParser = factory.newSAXParser();  
DefaultHandler 處理程序 =  new  DefaultHandler()   
{  
布爾 id =  false ;  
布爾 名 =  false ;  
布爾 姓氏= 假;  
布爾 主題= 假;  
布爾 標(biāo)記 =  false ;  
//解析器開始解析文檔中的特定元素    
public void  startElement(String uri, String localName, String qName, Attributes attributes) 拋出 SAXException    
{  
System.out.println( "開始元素:"  + qName);  
如果(qName.equalsIgnoreCase(“Id” ))  
{  
編號(hào)=真;  
}  
如果 (qName.equalsIgnoreCase(“FIRSTNAME” ))   
{  
名字= 真;  
}  
如果 (qName.equalsIgnoreCase(“LASTNAME” ))   
{  
姓氏 = 真;  
}  
如果 (qName.equalsIgnoreCase(“主題” ))   
{  
主題= 真;  
}  
如果 (qName.equalsIgnoreCase(“MARKS” ))   
{  
標(biāo)記= 真;  
}  
}  
//解析器結(jié)束解析文檔中的特定元素  
public void  endElement(String uri, String localName, String qName) 拋出 SAXException    
{  
System.out.println( "結(jié)束元素:"  + qName);  
}  
//讀取當(dāng)前解析元素的文本值  
public void  characters( char  ch[],  int  start,  int  length) 拋出 SAXException    
{  
如果 (編號(hào))   
{  
System.out.println( "ID : "  +  new  String(ch, start, length));  
編號(hào) = 假;  
}  
如果 (名字)   
{  
System.out.println( "名字:"  +  new  String(ch, start, length));  
名字= 假;  
}  
如果 (姓氏)   
{  
System.out.println( "姓氏:"  +  new  String(ch, start, length));  
姓氏 = 假;  
}  
如果 (主題)  
{  
System.out.println( "主題: "  +  new  String(ch, start, length));  
主題= 假;  
}  
如果 (標(biāo)記)   
{  
System.out.println( "標(biāo)記 : "  +  new  String(ch, start, length));  
標(biāo)記= 假;  
}  
}  
};  
saxParser.parse( "F:\\XMLFile.xml" , handler);  
}   
抓住 (例外 e)   
{  
e.printStackTrace();  
}  
}  
}  

輸出

開始元素:class
開始元素:student
開始元素:id 
ID:101
結(jié)束元素:id
開始元素:firstname 
First Name:Naman
結(jié)束元素:firstname
開始元素:lastname 
Last Name:Kumar
結(jié)束元素:lastname
開始元素:subject
主題:Math
結(jié)束元素:subject
開始元素:marks
標(biāo)記:83
結(jié)束元素:marks
結(jié)束元素:student
開始元素:student
開始元素:id 
ID:102
結(jié)束元素:id
開始元素:firstname
名字:Kapil
結(jié)束元素:firstname
開始元素:lastname
姓氏:Kumar
結(jié)束元素:lastname
開始元素:subject
主題:Chemistry
結(jié)束元素:subject
開始元素:marks 
Marks:60
結(jié)束元素:marks
結(jié)束元素:student
開始元素:student
開始元素:id 
ID:103
結(jié)束元素:id
開始元素:firstname
名字:Harsh
結(jié)束元素:firstname
開始元素:lastname 姓氏
:Singh
結(jié)束元素:lastname
開始元素:subject 
Subject:English
結(jié)束元素:subject
開始元素:marks 
Marks:70
結(jié)束元素:marks
結(jié)束元素:student
開始元素:student
開始元素:id 
ID:104
結(jié)束元素:id
開始元素:firstname
名字:Jitesh
結(jié)束元素:firstname
開始元素:lastname 姓氏
:Singh
結(jié)束元素:lastname
開始元素:subject
主題:Physics
結(jié)束元素:subject
開始元素:marks 
Marks:76
結(jié)束元素:marks
結(jié)束元素:student
結(jié)束元素:class

以上就是關(guān)于“Java讀取xml文件內(nèi)容的方法”介紹,大家如果想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻,里面的課程內(nèi)容詳細(xì),通俗易懂,適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日韩在线观看免费 | www.青青草| 免费激情网站 | 动漫美女胸被狂揉扒开吃奶动态图 | 99精品全国免费观看视频.. | 国产 中文 制服丝袜 另类 | 日本三级唾液浓厚在线观看 | 亚洲欧美日韩在线一区二区三区 | 亚洲精品不卡午夜精品 | 18一20岁一级毛片 | 婷婷在线观看视频 | 日本欧美一区二区三区在线 | 奇米影视亚洲 | 国产又色又爽又黄的视频在线观看 | 男女视频免费网站 | 欧美一级特黄视频 | 午夜视频免费看 | 久久香蕉精品视频 | 国美女福利视频午夜精品 | 九九综合| avtt天堂网手机版亚洲 | a级毛片视频免费观看 | 亚洲高清成人 | 水果视频在线观看 | 欧美手机在线 | 特级理论片 | 拔擦拔擦8x华人免费久久 | 成人免费看视频 | 免费va国产高清不卡大片 | 嘿嘿嘿在线观看 | h网站在线播放 | 国产成人自啪精品视频 | 人成免费在线视频 | 亚洲人成网址 | 在线国产播放 | 色网站视频| 波多野结衣免费免费视频一区 | 午夜成人影视 | 成年人免费在线视频观看 | 亚洲精品视频在线播放 | 在线观看成年人网站 |