Heim  >  Artikel  >  Backend-Entwicklung  >  XML-Programmierung-SAX

XML-Programmierung-SAX

黄舟
黄舟Original
2017-02-20 15:11:131482Durchsuche

XMLProgrammierung-SAX

Grundlagen Übersicht


SAX, der vollständige Name ist Simple API for XML, das sowohl eine Schnittstelle als auch eine Software ist Paket. Es ist eine Alternative zum XML-Parsing. SAX unterscheidet sich von der DOM-Analyse. Es scannt das Dokument Zeile für Zeile und analysiert es beim Scannen. Da die Anwendung die Daten nur beim Lesen überprüft, ist es nicht erforderlich, die Daten im Speicher zu speichern, was beim Parsen großer Dokumente einen großen Vorteil darstellt.

SAX ist ein ereignisgesteuertes „Push“-Modell für die Verarbeitung von XML, obwohl es nicht W3CStandard, aber es ist eine weithin anerkannte API. Der SAX-Parser erstellt keinen vollständigen Dokumentbaum wie DOM, sondern aktiviert beim Lesen des Dokuments eine Reihe von Ereignissen. Diese Ereignisse werden an Ereignishandler weitergeleitet, die dann Zugriff auf den Dokumentinhalt ermöglichen.

PS: SAX kann die XML-Datei nicht ändern, löschen und Operationen hinzufügen.

Warum die

SAX-Technologie einführen?

DOM

-Technologie ist auch eine sehr gute DOM-Parsing-Lösung SAX 🎜>Was ist mit der Technologie? Der Grund ist ganz einfach: DOM speichert XML in der Struktur eines Dokumentbaums, was bedeutet, dass in einem Rutsch gespeichert wird. Aus diesem Grund wurde die Scan- und Parsing-Technologie von SAX geboren. Schema


SAX

Parsing-Mechanismus

SAX

Parsing Ermöglicht das zu verarbeitende Dokument beim Lesen des Dokuments, ohne warten zu müssen, bis das gesamte Dokument geladen ist, bevor das Dokument bearbeitet wird.

In

Java

können Sie durch Erben der Schnittstelle

DefaultHandler

ein

SAX entwickeln Parser. Der Parsing-Mechanismus von SAX ist dem Event-Listening-Mechanismus sehr ähnlich. Beide warten darauf, dass ein Ereignis ausgelöst wird, und rufen dann die entsprechende Methode auf. Die am häufigsten verwendeten 5

Ereignisse von SAXParser:

1, startDocument(): Dies markiert die Startposition des vom

SAX

-Parser gescannten Dokuments.

2, endDocument(), das die Endposition des vom SAX-Parsers gescannten Dokuments markiert.

3, startElement(), was anzeigt, dass der SAX Parser gescannt hat Eröffnungs-Tag eines Elements.

4, character(), was anzeigt, dass der SAX-Parser einige gescannt hat Beachten Sie, dass der Text in Form eines char-Arrays gespeichert wird.

5, endElement(), was anzeigt, dass der SAX-Parser gescannt hat Das schließende Tag eines Elements.

Liste der allgemeinen Methodenparameter des Ereignishandlers

public void startDocument()

public void startElement(String uri , String localName, String qName,Attributes attributes)

uri - Namespace URI, wenn das Element keinen Namespace hat URI oder die leere Zeichenfolge, wenn keine Namespace-Verarbeitung durchgeführt wird.

localName – Lokaler Name (ohne Präfix) oder die leere Zeichenfolge, wenn keine Namespace-Verarbeitung durchgeführt wird.

qName – Qualifizierter Name (mit Präfix) oder die leere Zeichenfolge, wenn kein qualifizierter Name verfügbar ist.

Attribute – Attribute, die dem Element zugeordnet sind. Wenn keine Attribute vorhanden sind, handelt es sich um ein leeres Attributes -Objekt.

öffentliche Leerzeichen (char[] ch, int start, int length)

ch - Alle Zeichen des Dokuments .

start – Die Startposition im Zeichenarray.

Länge – Die Anzahl der zu verwendenden Zeichen aus dem Zeichenarray.

public void endElement(String uri, String localName, String qName)

uri - Namespace URI oder die leere Zeichenfolge, wenn das Element keinen Namespace URI hat oder wenn keine Namespace-Verarbeitung durchgeführt wird.

localName – Lokaler Name (ohne Präfix) oder die leere Zeichenfolge, wenn keine Namespace-Verarbeitung durchgeführt wird.

qName – Qualifizierter Name (mit Präfix) oder die leere Zeichenfolge, wenn kein qualifizierter Name verfügbar ist.

public void endDocument()

Parsing-Methode

Durch die gemeinsame Verwendung des Parsers und des Ereignishandlers können Sie das XML-Dokument analysieren. Der -Parser kann mithilfe der API von JAXP erstellt werden, um das SAX Parser Danach können Sie den Parser angeben, der ein bestimmtes XML-Dokument analysiert. Der Ereignishandler wird vom Programmierer geschrieben. Über die Parameter der Methode im Ereignishandler kann der Programmierer die Daten einfach vom Sax-Parser analysieren lassen, sodass er entscheiden kann wie die Daten verarbeitet werden.

Parsing-Schritt

1

, durch Aufrufen von SAXParserFactorys Die Methode newInstance() ruft das Parser-Factory-Objekt Sax ab.

2

, erhalten durch Aufruf der Methode newSAXParser() über den Parser Sax Factory-Objekt-ParserSAXParser-Objekt

3

, indem die parse-Methode des Parser-Objekts aufgerufen wird Parser mit Event-Handler-Objekt verknüpfen

Fall:

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();
	}
}
Das Obige ist der Inhalt von XML Programming-SAX. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:XML-Programmierung-DOMNächster Artikel:XML-Programmierung-DOM