搜尋
首頁後端開發XML/RSS教程java讀取解析xml檔案實例

讀取本地的xml文件,透過DOM解析,DOM解析的特點就是把整個xml文件裝載入記憶體中,形成一顆DOM樹形結構,樹結構是方便遍歷和操縱。

DOM解析的特性就是讀取xml檔轉換為 dom樹狀結構,透過節點進行遍歷。

這是W3c關於節點的概念

如果xml中包含有大量的數據,由於dom一次把xml裝入內存中的特性,所以dom不適合包含大量數據的xml解析。當包含有大量xml的時候,用SAX進行解析比較節省記憶體。

下面是一個運用DOM進行解析xml檔的範例:

xml檔結構如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
 <book category="cooking">
 <title>Everyday Italian</title>
 <author>Giada De Laurentiis</author>
 <year>2005</year>
 <price>30.00</price>
 </book>
 <book category="children">
 <title>Harry Potter</title>
 <author>J K. Rowling</author>
 <year>2005</year>
 <price>29.99</price>
 </book>
 <book category="web">
 <title>XQuery Kick Start</title>
 <author>James McGovern</author>
 <year>2003</year>
 <price>49.99</price>
 </book>
 <book category="web" cover="paperback">
 <title>Learning XML</title>
 <author>Erik T. Ray</author>
 <year>2003</year>
 <price>39.95</price>
 </book>
</bookstore>

建立解析xml的類別如下:

package xml.dom;
 
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
 
public class ReadXmlFile {
  
 public static void main(String[] args) {
  
 try{
   
  File xmlFile = new File("src/resource/book.xml");
   
  DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
   
  DocumentBuilder builder = builderFactory.newDocumentBuilder();
   
  Document doc = builder.parse(xmlFile);
   
  doc.getDocumentElement().normalize();
   
  System.out.println("Root element: "+doc.getDocumentElement().getNodeName());
   
  NodeList nList = doc.getElementsByTagName("book");
   
  for(int i = 0 ; i<nList.getLength();i++){
   
  Node node = nList.item(i);
   
  System.out.println("Node name: "+ node.getNodeName());
  Element ele = (Element)node;
   
  System.out.println("----------------------------");
  if(node.getNodeType() == Element.ELEMENT_NODE){
   
  System.out.println("book category: "+ ele.getAttribute("category"));
   
  System.out.println("title name: "+ ele.getElementsByTagName("title").item(0).getTextContent());
   
  System.out.println("author name: "+ele.getElementsByTagName("author").item(0).getTextContent());
   
  System.out.println("year :"+ele.getElementsByTagName("year").item(0).getTextContent());
   
  System.out.println("price : "+ele.getElementsByTagName("price").item(0).getTextContent());
   
  System.out.println("-------------------------");
   
   
  }
   
   
  }

解析結果:

Root element: bookstore
Node name: book
----------------------------
book category: cooking
title name: Everyday Italian
author name: Giada De Laurentiis
year :2005
price : 30.00
-------------------------
Node name: book
----------------------------
book category: children
title name: Harry Potter
author name: J K. Rowling
year :2005
price : 29.99
-------------------------
Node name: book
----------------------------
book category: web
title name: XQuery Kick Start
author name: James McGovern
year :2003
price : 49.99
-------------------------
Node name: book
----------------------------
book category: web
title name: Learning XML
author name: Erik T. Ray
year :2003
price : 39.95
-------------------------

package xml.dom;
 
import java.io.File;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
 
public class ReadXmlFile2 {
  
 public static void main(String[] args) {
 try{
   
  File xmlFile = new File("src/resource/book.xml");
   
  DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
   
  DocumentBuilder builder = builderFactory.newDocumentBuilder();
   
  Document doc = builder.parse(xmlFile);
   
  doc.getDocumentElement().normalize();
   
  System.out.println("Root element: "+doc.getDocumentElement().getNodeName());
   
   
  if(doc.hasChildNodes()){
   
  printNode(doc.getChildNodes());
  }
 }catch(Exception e){
  
 e.printStackTrace();
  
 }
  
 }
  
 public static void printNode(NodeList nodeList){
 System.out.println("------------------------");
 // System.out.println(nodeList.getLength());
 for(int i = 0; i<nodeList.getLength(); i++){
  
 Node node = (Node)nodeList.item(i);
  
  
 if(node.getNodeType() == Node.ELEMENT_NODE){
  
 System.out.println("node name: "+node.getNodeName());
  
 System.out.println("node value: "+node.getTextContent());
  
 if(node.hasAttributes()){
  NamedNodeMap nodeMap = node.getAttributes();
   
  for(int j = 0; j < nodeMap.getLength() ; j++){
   
  Node nodenew = nodeMap.item(j);
   
  System.out.println("node name "+nodenew.getNodeName());
  System.out.println("node value "+nodenew.getNodeValue());
  }
 }
 if(node.hasChildNodes()){
  printNode(node.getChildNodes());
 }
 }
  
 }
  
 }
 
}

下面利用循環節點的方式輸出:
循環節點輸出方式的程式碼如下:

Root element: bookstore
------------------------
node name: bookstore
node value: 
  
 Everyday Italian
 Giada De Laurentiis
 2005
 30.00
  
  
 Harry Potter
 J K. Rowling
 2005
 29.99
  
  
 XQuery Kick Start
 James McGovern
 2003
 49.99
  
  
 Learning XML
 Erik T. Ray
 2003
 39.95
  
 
------------------------
node name: book
node value: 
 Everyday Italian
 Giada De Laurentiis
 2005
 30.00
  
node name category
node value cooking
------------------------
node name: title
node value: Everyday Italian
node name lang
node value en
------------------------
node name: author
node value: Giada De Laurentiis
------------------------
node name: year
node value: 2005
------------------------
node name: price
node value: 30.00
------------------------
node name: book
node value: 
 Harry Potter
 J K. Rowling
 2005
 29.99
  
node name category
node value children
------------------------
node name: title
node value: Harry Potter
node name lang
node value en
------------------------
node name: author
node value: J K. Rowling
------------------------
node name: year
node value: 2005
------------------------
node name: price
node value: 29.99
------------------------
node name: book
node value: 
 XQuery Kick Start
 James McGovern
 2003
 49.99
  
node name category
node value web
------------------------
node name: title
node value: XQuery Kick Start
node name lang
node value en
------------------------
node name: author
node value: James McGovern
------------------------
node name: year
node value: 2003
------------------------
node name: price
node value: 49.99
------------------------
node name: book
node value: 
 Learning XML
 Erik T. Ray
 2003
 39.95
  
node name category
node value web
node name cover
node value paperback
------------------------
node name: title
node value: Learning XML
node name lang
node value en
------------------------
node name: author
node value: Erik T. Ray
------------------------
node name: year
node value: 2003
------------------------
node name: price
node value: 39.95
------------------------

輸出結果如下:

<book category="cooking">
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>

關於節點的問題:

rrreee

對於book應用:doc.getChildNodes() 得到一個NodeListreee
對於book應用:doc.getChildNodes() 得到一個Node其中NodeListreee
對於book應用:doc.getChildNodes() 得到一個NodeListreee?長度為9
9個節點分別如下:
title節點
lang節點  
Everyday節點
 author節點 
Giada De Laurentiis節點
 yearcom相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
解碼RSS:內容提要的XML結構解碼RSS:內容提要的XML結構Apr 17, 2025 am 12:09 AM

RSS的XML結構包括:1.XML聲明和RSS版本,2.頻道(Channel),3.條目(Item)。這些部分構成了RSS文件的基礎,允許用戶通過解析XML數據來獲取和處理內容信息。

如何解析和利用基於XML的RSS提要如何解析和利用基於XML的RSS提要Apr 16, 2025 am 12:05 AM

RSSFEEDSUSEXMLTOSYNDICATECONTENT; PARSINGTHEMINVOLVESLOADINGINGINGINGINSSTRUCTURE,andExtractingData.ApplicationsIncludeBuildBuildingNewSagGregatorSaterNewSagGregatorSator andTrackingPodcastepodcastepisodes。

RSS文檔:他們如何提供您喜歡的內容RSS文檔:他們如何提供您喜歡的內容Apr 15, 2025 am 12:01 AM

RSS文檔的工作原理是通過XML文件發佈內容更新,用戶通過RSS閱讀器訂閱並接收通知。 1.內容髮布者創建並更新RSS文檔。 2.RSS閱讀器定期訪問並解析XML文件。 3.用戶瀏覽和閱讀更新內容。使用示例:訂閱TechCrunch的RSS源,只需複制鏈接到RSS閱讀器中即可。

用XML建造供稿:RSS的動手指南用XML建造供稿:RSS的動手指南Apr 14, 2025 am 12:17 AM

使用XML構建RSSfeed的步驟如下:1.創建根元素並設置版本;2.添加channel元素及其基本信息;3.添加條目(item)元素,包括標題、鏈接和描述;4.轉換XML結構為字符串並輸出。通過這些步驟,你可以從零開始創建一個有效的RSSfeed,並通過添加額外的元素如發布日期和作者信息來增強其功能。

創建RSS文檔:逐步教程創建RSS文檔:逐步教程Apr 13, 2025 am 12:10 AM

創建RSS文檔的步驟如下:1.使用XML格式編寫,根元素為,包含元素。 2.在內添加、、等元素描述頻道信息。 3.添加元素,每個代表一個內容條目,包含、、、等。 4.可選地添加和元素,豐富內容。 5.確保XML格式正確,使用在線工具驗證,優化性能並保持內容更新。

XML在RSS中的作用:聯合內容的基礎XML在RSS中的作用:聯合內容的基礎Apr 12, 2025 am 12:17 AM

XML在RSS中的核心作用是提供一種標準化和靈活的數據格式。 1.XML的結構和標記語言特性使其適合數據交換和存儲。 2.RSS利用XML創建標準化格式,方便內容共享。 3.XML在RSS中的應用包括定義feed內容的元素,如標題和發布日期。 4.優勢包括標準化和可擴展性,挑戰包括文件冗長和嚴格語法要求。 5.最佳實踐包括驗證XML有效性、保持簡潔、使用CDATA和定期更新。

從XML到可讀的內容:揭開RSS feed的神秘面紗從XML到可讀的內容:揭開RSS feed的神秘面紗Apr 11, 2025 am 12:03 AM

rssfeedsarexmldocuments usedforcontentAggregation and distribution.totransformthemintoreadableContent:1)parsethethexmlusinglibrarieslibrariesliblarieslikeparserinparserinpython.2)andledifferentifferentrssssssssssssssssssssssssssssssssssssssssssssssersions andpotentionparsingrorS.3)

是否有基於JSON的RSS替代方案?是否有基於JSON的RSS替代方案?Apr 10, 2025 am 09:31 AM

JSONFeed是一種基於JSON的RSS替代方案,其優勢在於簡潔性和易用性。 1)JSONFeed使用JSON格式,易於生成和解析。 2)它支持動態生成,適用於現代Web開發。 3)使用JSONFeed可以提升內容管理效率和用戶體驗。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器