大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(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) 瀏覽2831次

在 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ù)文檔推薦 >>
主站蜘蛛池模板: 操穴影院 | 性欧美video另类3d | 欧美日韩一级大片 | 精品国产免费观看 | 欧美一级一极性活片免费观看 | 国产青色 | 日韩欧美综合在线 | 91久久国产成人免费观看资源 | 亚洲第一红杏精品久久 | 国产一级特黄全黄毛片 | 青青青青青青久久久免费观看 | 毛片免费在线视频 | 99国产情在线视频 | 开心久久婷婷综合中文字幕 | 九九热综合| 香蕉视频a | 久久精品免看国产 | 欧日韩一区二区三区 | 四虎跳转48小时 | 奇米影视7777久久精品 | 国产一级特黄高清在线大片 | 夜夜操网 | 天天想天天干 | 国产欧美综合精品一区二区 | 久久有这有精品在线观看 | 1级毛片 | 我要看欧美一级毛片 | 狠狠色狠狠色综合 | 亚洲精品一区二区伦理 | 天天操天天摸天天碰 | 久久亚洲国产午夜精品理论片 | 久久www免费人成看片色多多 | 中国漂亮护士一级毛片 | 成熟女人免费一级毛片 | 奇米影视9999 | 青青热久久久久综合精品 | 成年男女免费视频网站 | 日日夜夜天天操 | 日日拍夜夜拍 | 图片专区亚洲欧美另类 | 99婷婷 |