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)!

RSS2.0 adalah standard terbuka yang membolehkan penerbit kandungan mengedarkan kandungan dengan cara berstruktur. Ia mengandungi metadata yang kaya seperti tajuk, pautan, penerangan, tarikh pelepasan, dan lain -lain, yang membolehkan pelanggan dengan cepat melayari dan mengakses kandungan. Kelebihan RSS2.0 adalah kesederhanaan dan skalabilitasnya. Sebagai contoh, ia membolehkan unsur -unsur tersuai, yang bermaksud pemaju boleh menambah maklumat tambahan berdasarkan keperluan mereka, seperti penulis, kategori, dll.

RSS adalah format berasaskan XML yang digunakan untuk menerbitkan kandungan yang sering dikemas kini. 1. RSSFEED menganjurkan maklumat melalui struktur XML, termasuk tajuk, pautan, keterangan, dan lain -lain. 3. Penggunaan lanjutan boleh termasuk fail multimedia dan maklumat dikelaskan. 4. Gunakan alat pengesahan XML semasa debugging untuk memastikan bahawa unsur -unsur yang diperlukan wujud dan dikodkan dengan betul. 5. Mengoptimumkan RSSFEED boleh dicapai dengan paging, caching dan menjaga struktur mudah. Dengan memahami dan menggunakan pengetahuan ini, kandungan dapat diuruskan dan diedarkan dengan berkesan.

RSS adalah format berasaskan XML yang digunakan untuk menerbitkan dan melanggan kandungan. Struktur XML fail RSS termasuk elemen akar, elemen, dan pelbagai elemen, masing -masing mewakili entri kandungan. Baca dan menghuraikan fail RSS melalui Parser XML, dan pengguna boleh melanggan dan mendapatkan kandungan terkini.

XML mempunyai kelebihan data berstruktur, skalabilitas, keserasian silang platform dan pengesahan parsing dalam RSS. 1) data berstruktur memastikan konsistensi dan kebolehpercayaan kandungan; 2) Skalabiliti membolehkan penambahan tag tersuai untuk memenuhi keperluan kandungan; 3) keserasian silang platform menjadikannya berfungsi dengan lancar pada peranti yang berbeza; 4) Alat analisis dan pengesahan memastikan kualiti dan integriti makanan.

Pelaksanaan RSS dalam XML adalah untuk mengatur kandungan melalui format XML berstruktur. 1) RSS menggunakan XML sebagai format pertukaran data, termasuk elemen seperti maklumat saluran dan senarai projek. 2) Apabila menghasilkan fail RSS, kandungan mesti dianjurkan mengikut spesifikasi dan diterbitkan ke pelayan untuk langganan. 3) Fail RSS boleh dilanggan melalui pembaca atau pemalam untuk mengemas kini kandungan secara automatik.

Ciri -ciri lanjutan RSS termasuk ruang nama kandungan, modul lanjutan, dan langganan bersyarat. 1) Ruang nama kandungan memanjangkan fungsi RSS, 2) modul yang dilanjutkan seperti Dublincore atau iTunes untuk menambah metadata, 3) penyertaan penapis langganan bersyarat berdasarkan keadaan tertentu. Fungsi -fungsi ini dilaksanakan dengan menambahkan unsur -unsur dan atribut XML untuk meningkatkan kecekapan pemerolehan maklumat.

RssfeedsusexmltostructureContentupdates.1) xmlprovidesahierarchicalstructurefordata.2) theelementDefinestHefeed'sidentityandcontainselements.3) elementsRepresentIndividualcontentpieces.4) rssiseStomeS

RSS dan XML adalah alat untuk pengurusan kandungan web. RSS digunakan untuk menerbitkan dan melanggan kandungan, dan XML digunakan untuk menyimpan dan memindahkan data. Mereka bekerja dengan penerbitan kandungan, langganan, dan kemas kini. Contoh penggunaan termasuk catatan blog RSS dan maklumat buku penyimpanan XML.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Dreamweaver CS6
Alat pembangunan web visual
