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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java讀取xml文件內容的方法

Java讀取xml文件內容的方法

更新時間:2022-12-05 11:31:34 來源:動力節點 瀏覽2676次

在 Java 中讀取 XML 文件與讀取其他文件(如 .docx 和 .txt)有很大不同,因為 XML 文件包含標簽之間的數據。Java 提供了許多解析 XML 文件讀取的方法。Java 中有兩個解析器可以解析 XML 文件:

Java DOM解析器

Java SAX解析器

Java DOM 解析器

DOM API提供了讀取和寫入 XML 文件的類。我們可以使用 DOM API 創建、刪除、修改和重新排列節點。DOM 解析器解析整個 XML 文件并在內存中創建一個DOM對象。它以樹結構對XML 文件進行建模,以便于遍歷和操作。在 DOM 中,XML 文件中的所有內容都是一個節點。該節點表示 XML 文件的一個組件。DOM 解析器在將 XML 文件加載到內存中時,處理速度很慢并且占用大量內存。

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

實例化 XML 文件: DOM 解析器將 XML 文件加載到內存中,并將每個標簽視為一個元素。

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

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

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

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

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

第 1 步:創建一個簡單的Java項目。

第 2 步:創建類文件并提供類文件名。我們已經創建了名為ReadXMLFileExample1的類文件。

第 3 步:編寫如下代碼。

第 4 步:下載dom-2.3.0-jaxb-1.0.6.jar文件:單擊此處...

第 5 步:在項目中創建一個lib文件夾。

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

第 7 步:設置類路徑:

右擊項目->Build Path->Configure Build Path->Add External JARs->選擇JAR文件->點擊Open按鈕->Apply and Close。

第 8 步:創建XML文件。我們創建了一個名為XMLFile.xml的 XML 文件,并將以下數據寫入其中。

第 9 步:運行項目。

創建 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

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

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

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

例子

導入 java.io.文件;  
導入 javax.xml.parsers.DocumentBuilder;  
導入 javax.xml.parsers.DocumentBuilderFactory;  
導入 org.w3c.dom.Document;  
導入 org.w3c.dom.NamedNodeMap;  
導入 org.w3c.dom.Node;  
導入 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 節點列表)    
{  
for  ( int  count =  0 ; count < nodeList.getLength(); count++)   
{  
節點 elemNode = nodeList.item(count);  
如果 (elemNode.getNodeType() == Node.ELEMENT_NODE)   
{  
// 獲取節點名稱和值  
System.out.println( "\n節點名稱 = "  + elemNode.getNodeName()+  " [OPEN]" );  
System.out.println( "節點內容 = "  + elemNode.getTextContent());  
如果 (elemNode.hasAttributes())   
{  
NamedNodeMap nodeMap = elemNode.getAttributes();  
for  ( int  i =  0 ; i < nodeMap.getLength(); i++)   
{  
節點node = nodeMap.item(i);  
System.out.println( "屬性名稱:"  + node.getNodeName());  
System.out.println( "屬性值:"  + node.getNodeValue());  
}  
}  
如果 (elemNode.hasChildNodes())   
{  
//如果節點有子節點則遞歸調用  
printNodeList(elemNode.getChildNodes());  
}  
System.out.println( "節點名稱 = "  + elemNode.getNodeName()+  " [CLOSE]" );  
}  
}  
}  
}  

輸出

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

Java SAX 解析器

Java SAX 解析器代表Simple API for XML。SAX 解析器逐行解析 XML 文件。它在遇到 xml 文件中的開始標記、結束標記和字符數據時觸發事件。SAX 解析器也稱為基于事件的解析器。

SAX 解析器不會將任何 XML 文件加載到內存中。它不創建 XML 文檔的任何對象表示。SAX 解析器使用回調函數通知客戶端 XML 文檔結構。它比 DOM 解析器更快并且使用更少的內存。

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

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

導入 javax.xml.parsers.SAXParser;  
導入 javax.xml.parsers.SAXParserFactory;  
導入 org.xml.sax.Attributes;  
導入 org.xml.sax.SAXException;  
導入 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 ;  
布爾 姓氏= 假;  
布爾 主題= 假;  
布爾 標記 =  false ;  
//解析器開始解析文檔中的特定元素    
public void  startElement(String uri, String localName, String qName, Attributes attributes) 拋出 SAXException    
{  
System.out.println( "開始元素:"  + qName);  
如果(qName.equalsIgnoreCase(“Id” ))  
{  
編號=真;  
}  
如果 (qName.equalsIgnoreCase(“FIRSTNAME” ))   
{  
名字= 真;  
}  
如果 (qName.equalsIgnoreCase(“LASTNAME” ))   
{  
姓氏 = 真;  
}  
如果 (qName.equalsIgnoreCase(“主題” ))   
{  
主題= 真;  
}  
如果 (qName.equalsIgnoreCase(“MARKS” ))   
{  
標記= 真;  
}  
}  
//解析器結束解析文檔中的特定元素  
public void  endElement(String uri, String localName, String qName) 拋出 SAXException    
{  
System.out.println( "結束元素:"  + qName);  
}  
//讀取當前解析元素的文本值  
public void  characters( char  ch[],  int  start,  int  length) 拋出 SAXException    
{  
如果 (編號)   
{  
System.out.println( "ID : "  +  new  String(ch, start, length));  
編號 = 假;  
}  
如果 (名字)   
{  
System.out.println( "名字:"  +  new  String(ch, start, length));  
名字= 假;  
}  
如果 (姓氏)   
{  
System.out.println( "姓氏:"  +  new  String(ch, start, length));  
姓氏 = 假;  
}  
如果 (主題)  
{  
System.out.println( "主題: "  +  new  String(ch, start, length));  
主題= 假;  
}  
如果 (標記)   
{  
System.out.println( "標記 : "  +  new  String(ch, start, length));  
標記= 假;  
}  
}  
};  
saxParser.parse( "F:\\XMLFile.xml" , handler);  
}   
抓住 (例外 e)   
{  
e.printStackTrace();  
}  
}  
}  

輸出

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

以上就是關于“Java讀取xml文件內容的方法”介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java視頻,里面的課程內容詳細,通俗易懂,適合小白學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一二三区无线码2021 | 九九毛片| 亚洲国产精品久久久久婷婷软件 | 久草手机视频 | 亚洲欧美综合在线观看 | 91官网 | 91在线视频网址 | 日本色综合 | 日韩精品视频美在线精品视频 | 欧美aaaa在线观看视频免费 | 老司机深夜福利影院 | 在线免费精品视频 | 欧美日比 | 婷婷国产天堂久久综合五月 | 久久综合给合久久狠狠狠色97 | 99久久精品免费看国产麻豆 | 在线观看 一区二区 麻豆 | 国内精品在线视频 | 日韩综合在线 | 亚洲欧美日韩高清一区二区三区 | 久久久精品2021免费观看 | 伊人久久大香线蕉综合bd高清 | 四虎影视精品永久免费网站 | 欧美日韩性猛交xxxxx免费看 | www.四虎.com| 欧美成人午夜视频在线观看 | 国产成人综合亚洲动漫在线 | www4虎| 免费精品国产 | 亚洲欧美一区二区三区在线播放 | 精品伊人网 | 久久综合九色综合91 | 国产日韩不卡免费精品视频 | 久久精品爱 | 成人免费一级片 | 国产成人综合久久亚洲精品 | 久久精品免费视频6 | 欧美激情免费 | 国产精品揄拍100视频 | 天天搞夜夜 | 国产中文|