XML編程-SAX
基本概述
SAX,全名Simple API for XML,既是一種接口,也是一種軟體包。它是一種XML解析的替代方法。 SAX不同於DOM解析,它逐行掃描文檔,一邊掃描一邊解析。由於應用程式只是在讀取數據時檢查數據,因此不需要將數據儲存在記憶體中,這對於大型文件的解析是個巨大優勢。
SAX是一個用於處理XML事件驅動的「推」模型,雖然它不是W3C標準,但它是一個得到了廣泛認可的API。 SAX解析器不像DOM那樣建立一個完整的文檔樹,而是在讀取文檔時激活一系列事件,這些事件被推給事件處理器,然後由事件處理器提供對文件內容的存取。
PS:SAX不能夠對XML檔案進行修改,刪除、新增操作。
為什麼引進SAX技術?
DOM技術也是非常好的DOM解析方案,為什麼還會出現SAX 技術呢?原因很簡單,那就是DOM是以文檔樹的結構對XML進行保存,這就表明是一次性將XML讀入內存,那麼這在大型的XML檔案中是不可能的。所以才產生了SAX這種掃描解析的技術。
原理圖
SAX解析機制
SAX解析允許在讀取文件的時候,即對文件進行處理,而不必等到整個文件裝載完才會文件進行操作。
在Java中,透過繼承DefaultHandler 接口,可以開發一個SAX解析器。
SAX的解析機制和事件監聽機制很像,都是等待某一事件觸發,然後呼叫對應方法。
SAX解析器最常用5個事件:
1、startDocument():這標識著SAX解析器掃描到文件開始位置。
2、endDocument(),這標識著SAX解析器掃描到文件的結束位置。
3、startElement(),這標識著SAX解析器掃描到一個元素的開始標籤。
4、character(),這標識著SAX解析器掃描到了一些文本,注意它是以char數組形式存放的。
5、endElement(),這標識著SAX解析器掃描到了一個元素的結束標籤。
事件處理器常用方法參數清單
public void startDocument()
public void startElement(String uri, String localName, String qName,Attributes attributes)
uri - 名稱空間 URI,若元素沒有任何名稱空間 URI,或沒有正在執行名稱空間處理,則為空字串。
localName - 本地名稱(不含前綴),如果沒有正在執行名稱空間處理,則為空字串。
qName - 限定的名稱(帶有前綴),如果限定的名稱不可用,則為空字串。
attributes - 附加到元素的屬性。如果沒有屬性,則它將是空的 Attributes 物件。
public void characters(char[] ch, int start, int length)
ch - 文件的所有字元。
start - 字元陣列中的開始位置。
length - 從字元陣列中使用的字元數。
public void endElement(String uri, String localName, String qName)
uri - 名稱空間 URI,如果元素沒有任何名稱空間 URI,或沒有正在執行名稱空間處理,則為空字串。
localName - 本地名稱(不含前綴),如果沒有正在執行名稱空間處理,則為空字串。
qName - 限定的名稱(帶有前綴),如果限定的名稱不可用,則為空字串。
public void endDocument()
解析方式
透過解析器和事件處理器一起使用,可以解析XML文件。 解析器可以使用JAXP的API創建,創建出SAX解析器後,就可以指定解析器去解析某個XML文件。事件處理器由程式設計師編寫,程式設計師透過事件處理器中方法的參數,就可以輕鬆地得到sax解析器解析到的數據,從而可以決定如何對數據進行處理。
解析步驟
1、透過呼叫SAXParserFactory的 newInstance()方法取得Sax解析器工廠物件。
2、透過Sax解析器工廠物件呼叫newSAXParser()方法取得解析器SAXParser物件
3、透過呼叫解析器物件的parse方法將解析器與事件處理器物件關聯
案例:
XML6.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <班级 班次="1班" 编号="C1"> <学生 地址="湖南" 学号="n1" 性别="男" 授课方式="面授" 朋友="n2" 班级编号="C1"> <名字>张三</名字> <年龄>20</年龄> <介绍>不错</介绍> </学生> <学生 学号="n2" 性别="女" 授课方式="面授" 朋友="n1 n3" 班级编号="C1"> <名字>李四</名字> <年龄>18</年龄> <介绍>很好</介绍> </学生> <学生 学号="n3" 性别="男" 授课方式="面授" 朋友="n2" 班级编号="C1"> <名字>王五</名字> <年龄>22</年龄> <介绍>非常好</介绍> </学生> <学生 性别="男"> <名字>小明</名字> <年龄>30</年龄> <介绍>好</介绍> </学生> </班级>
package com.pc; import javax.xml.parsers.*; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class XML6{ //使用sax技术去解析xml文件 public static void main(String[] args) throws Exception, SAXException { // TODO Auto-generated method stub //1.创建SaxParserFactory SAXParserFactory spf=SAXParserFactory.newInstance(); //2.创建SaxParser 解析器 SAXParser saxParser=spf.newSAXParser(); //3 把xml文件和事件处理对象关联 saxParser.parse("src/com/pc/XML6.xml",new MyDefaultHandler2() ); } } // 只显示学生的名字和年龄 class MyDefaultHandler2 extends DefaultHandler{ private boolean isName=false; private boolean isAge=false; @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub String con=new String(ch,start,length); if(!con.trim().equals("")&&(isName||isAge)){ System.out.println(con); } isName=false; isAge=false; //super.characters(ch, start, length); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void endElement(String uri, String localName, String name) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, name); } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if(name.equals("名字")){ this.isName=true; }else if(name.equals("年龄")){ this.isAge=true; } } } //定义事件处理类 class MyDefaultHandler1 extends DefaultHandler{ //发现文档开始 @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("startDocument()"); super.startDocument(); } //发现xml文件中的一个元素 @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // TODO Auto-generated method stub System.out.println("元素名称="+name); } //发现xml文件中的文本 @Override public void characters(char[] ch, int start, int length) throws SAXException { String con=new String(ch,start,length); //显示文本内容: if(!con.trim().equals("")){ System.out.println(new String(ch,start,length)); } } //发现xml文件中一个元素介绍</xx> @Override public void endElement(String uri, String localName, String name) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, name); } //发现文档结束 @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("endDocument()"); super.endDocument(); } }
以上就是XML程式設計-SAX 的內容,更多相關內容請關注PHP中文網(www.php.cn)!

RSS是一種基於XML的格式,用於發布和訂閱內容。 RSS文件的XML結構包括根元素、元素和多個元素,每個代表一個內容條目。通過XML解析器讀取和解析RSS文件,用戶可以訂閱並獲取最新內容。

XML在RSS中具有結構化數據、可擴展性、跨平台兼容性和解析驗證的優勢。 1)結構化數據確保內容的一致性和可靠性;2)可擴展性允許添加自定義標籤以適應內容需求;3)跨平台兼容性使其在不同設備上無縫工作;4)解析和驗證工具確保Feed的質量和完整性。

RSS在XML中的實現方式是通過結構化的XML格式來組織內容。 1)RSS使用XML作為數據交換格式,包含頻道信息和項目列表等元素。 2)生成RSS文件需按規範組織內容,發佈到服務器供訂閱。 3)RSS文件可通過閱讀器或插件訂閱,實現內容自動更新。

RSS的高級功能包括內容命名空間、擴展模塊和條件訂閱。 1)內容命名空間擴展RSS功能,2)擴展模塊如DublinCore或iTunes添加元數據,3)條件訂閱根據特定條件篩選條目。這些功能通過添加XML元素和屬性實現,提升信息獲取效率。

RSSFEEDSUSEXMLTOSSTRUCTURECONTUPDATE.1)XMLPROVIDEDIDESAHIERARCHICALSTRUCTUREFFORDATA.2)THEELEMENTDEFINESTHEEFEED'SIDENTITYANDCONTAINS ELEMENT.3)ELEMENTEMERPREPRESERPRESENTERPRESENTIVIDIVIVELPIECTUALPIECES.4)RSSSSSSSSSSSISEXTEXTENSIBLERECTICERSINCREECTINCERINCTICENT.5)

RSS和XML是用於網絡內容管理的工具。 RSS用於發布和訂閱內容,XML用於存儲和傳輸數據。它們的工作原理包括內容髮布、訂閱和更新推送。使用示例包括RSS發布博客文章和XML存儲書籍信息。

RSS文檔是基於XML的結構化文件,用於發布和訂閱頻繁更新的內容。它的主要作用包括:1)自動化內容更新,2)內容聚合,3)提高瀏覽效率。通過RSSfeed,用戶可以訂閱並及時獲取來自不同來源的最新信息。

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

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