cari

XML编程-SAX

Feb 20, 2017 pm 03:11 PM

XML编程-SAX

基本概述


    SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。

    SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的APISAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。

PSSAX不能够对XML文件进行修改,删除、添加操作。

 

为什么引入SAX技术?

    DOM技术也是一种非常好的DOM解析方案,为什么还会出现SAX技术呢?原因很简单,那就是DOM是以文档树的结构对XML进行保存,这就表明是一次性将XML读入内存,那么这在大型的XML文件中是不可能的。所以才产生了SAX这种扫描解析的技术。

 

原理图


SAX解析机制


    SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。

    在Java中,通过继承DefaultHandler 接口,可以开发一个SAX解析器。

    SAX的解析机制和事件监听机制很像,都是等待某一事件触发,然后调用相应方法。

    SAX解析器的最常用5个事件:

1startDocument():这标识着SAX解析器扫描到文档开始位置。

2endDocument(),这标识着SAX解析器扫描到文档的结束位置。

3startElement(),这标识着SAX解析器扫描到一个元素的开始标签。

4character(),这标识着SAX解析器扫描到了一些文本,注意它是以char数组形式存放的。

5endElement(),这标识着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文档。解析器可以使用JAXPAPI创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。

 

解析步骤

1、通过调用SAXParserFactorynewInstance()方法获得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)!


Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Format Dokumen RSS: Meneroka RSS 2.0 dan seterusnyaFormat Dokumen RSS: Meneroka RSS 2.0 dan seterusnyaApr 26, 2025 am 12:22 AM

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.

Memahami RSS: Perspektif XMLMemahami RSS: Perspektif XMLApr 25, 2025 am 12:14 AM

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 dalam XML: Tag penyahkodan, atribut, dan strukturRSS dalam XML: Tag penyahkodan, atribut, dan strukturApr 24, 2025 am 12:09 AM

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.

Kelebihan XML dalam RSS: menyelam dalam teknikalKelebihan XML dalam RSS: menyelam dalam teknikalApr 23, 2025 am 12:02 AM

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.

RSS dalam XML: Membentangkan teras sindikasi kandunganRSS dalam XML: Membentangkan teras sindikasi kandunganApr 22, 2025 am 12:08 AM

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.

Di luar asas: Ciri -ciri Dokumen RSS LanjutanDi luar asas: Ciri -ciri Dokumen RSS LanjutanApr 21, 2025 am 12:03 AM

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.

Tulang belakang xml: bagaimana suapan rss disusunTulang belakang xml: bagaimana suapan rss disusunApr 20, 2025 am 12:02 AM

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

RSS & XML: Memahami kandungan web yang dinamikRSS & XML: Memahami kandungan web yang dinamikApr 19, 2025 am 12:03 AM

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.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual