Inhaltsverzeichnis
1. SAX-Analyse
1.1. SAX-Parsing-Mechanismus
1.2 SAX-Parsing-Beispiel
Sax ist ein Push-Mechanismus, Sie erstellen einen Sax-Parser, der Ihnen sagt, wann Es findet den Inhalt im XML-Dokument (und sendet das Ereignis an Sie weiter, ähnlich wie das Abhören von Ereignissen in Java Swing). Es ist Sache des Programmierers, zu entscheiden, was mit diesen Erkenntnissen geschehen soll.
1.2.SAX解析实例
Heim Backend-Entwicklung XML/RSS-Tutorial XML – SAX für XML-Parsing

XML – SAX für XML-Parsing

Feb 24, 2017 pm 03:06 PM

1. SAX-Analyse

  • Wenn Sie DOM zum Parsen eines XML-Dokuments verwenden, müssen Sie das gesamte XML-Dokument lesen und erstellen Es speichert das Dokumentobjekt des gesamten DOM-Baums, um das XML-Dokument zu bearbeiten. Wenn das XML-Dokument in diesem Fall besonders groß ist, verbraucht es viel Computerspeicher und kann in schweren Fällen sogar zu einem Speicherüberlauf führen.

  • SAX-Parsing ermöglicht die Verarbeitung des Dokuments beim Lesen des Dokuments, ohne warten zu müssen, bis das gesamte Dokument geladen ist.

  • Entwickeln Sie einen SAX-Parser durch Vererbung DefaultHandler

[Hinweis] SAX main Es wird verwendet zum Parsen von XML-Dokumenten und kann keine Elemente ändern, löschen oder hinzufügen.

1.1. SAX-Parsing-Mechanismus

Sax ist ein Push-Mechanismus, Sie erstellen einen Sax-Parser, Der Parser teilt Ihnen mit, wenn er den Inhalt im XML-Dokument findet (indem er das Ereignis an Sie weiterleitet, ähnlich wie beim Abhören von Ereignissen in Java Swing). Es ist Sache des Programmierers, zu entscheiden, was mit diesen Erkenntnissen geschehen soll.

In Saxofon-basierten Programmen gibt es fünf am häufigsten verwendete Saxofon-Ereignisse:

1.startDocument()–> teilt Ihrem Parser mit, dass er mit dem Scannen des Dokuments
beginnt 2.endDocument()–> teilt Ihnen mit, dass der Parser das Ende des Dokuments
gefunden hat 3.startElement()–> teilt Ihnen mit, dass der Parser ein Start-Tag gefunden hat. Dieses Ereignis teilt Ihnen den Namen des Tags, alle Attributnamen und Werte des Elements
mit 4.characters()–> sagt Ihnen, dass der Parser Text gefunden hat. Sie erhalten ein Zeichenarray, den Offset des Arrays und einen Längenoffset. Mit diesen drei Variablen können Sie den vom Parser gefundenen Text abrufen 5.endElement()–> teilt Ihnen mit, dass der Parser ein End-Tag gefunden hat

1.2 SAX-Parsing-Beispiel

Verwenden Sie weiterhin das beim DOM-Parsing verwendete XML-Beispiel wie folgt:

<?xml version="1.0" encoding="utf-8" standalone="no"?><班级>
    <学生 地址="香港">
        <名字>周小星</名字>
        <年龄>23</年龄>
        <介绍>学习刻苦</介绍>
    </学生>
    <学生 地址="澳门">
        <名字>林晓</名字>
        <年龄>25</年龄>
        <介绍>是一个好学生</介绍>
    </学生></班级>
Nach dem Login kopieren
Nach dem Login kopieren

[Schritte]:

1. Verwenden Sie SAXParserFactory, um ein SAX-Parsing zu erstellen Factory

SAXParserFactory spf = SAXParserFactory.newInstance();
Nach dem Login kopieren
Nach dem Login kopieren
2. Holen Sie sich das Parser-Objekt über die SAX-Parsing-Factory

SAXParser sp = spf.newSAXParser();
Nach dem Login kopieren
Nach dem Login kopieren
3. Verknüpfen Sie das Parser-Objekt mit dem Event-Handler-Objekt

sp.parse("src/myClass.xml",new MyHandler());
Nach dem Login kopieren
Nach dem Login kopieren
Hier

Sie müssen es selbst definieren, es muss MyHandler erben und dann die fünf oben genannten Sax-Ereignismethoden in der Klasse DefaultHandler neu schreiben. Natürlich können Sie auch einfach das überschreiben, was Sie benötigen. MyHandlerZum Beispiel lautet das
, das ich jetzt geschrieben habe, wie folgt: MyHandler

class MyHandler extends DefaultHandler{    /**
     * 发现文档开始,该函数只会被调用一次
     */
    @Override
    public void startDocument() throws SAXException {
        System.out.println("startDocument");
    }    /**
     * 发现文档结束,该函数只会被调用一次
     */
    @Override
    public void endDocument() throws SAXException {
        System.out.println("endDocument");
    }    /**
     * 发现XML中的一个元素开始,会被反复调用
     */
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.println("元素名称:"+qName);
    }    /**
     * 发现XML中的一个元素结束,会被反复调用
     */
    @Override
    public void endElement(String uri, String localName, String qName)            
    throws SAXException {

    }    /**
     * 发现XML文件中的文本,会被反复调用
     */
    @Override
    public void characters(char[] ch, int start, int length)            
    throws SAXException {        // 显示文本内容
        String text = new String(ch,start,length);        if(!text.trim().equals("")){
            System.out.println(text);
        }
    }
}
Nach dem Login kopieren
Das laufende Ergebnis lautet wie folgt:

XML – SAX für XML-Parsing

Wie Sie Sie können sehen, dass dies ein XML-Dokument ist. Eine Art Durchquerung, und alles, was Sax tun kann, ist Durchqueren.


Wenn wir jetzt also eine solche Anforderung haben:

只显示所有学生的姓名和年龄,不显示学生的介绍,怎么实现呢?

Wir können zwei boolesche Variablen isName und isAge in der Klasse

definieren. Identifizieren Sie, ob es sich um ein Namenselement oder ein Alterselement in der MyHandler-Methode handelt. Wenn ja, rufen Sie den entsprechenden Text in der startElement-Methode wie folgt ab: characters

Definieren Sie zwei boolesche Variablen

private boolean isName = false;private boolean isAge = false;
Nach dem Login kopieren
Nach dem Login kopieren

2. Urteil in der -Methode hinzufügen startElement

@Overridepublic void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {    if(qName.equals("名字")){        this.isName = true;
    }else if(qName.equals("年龄")){        this.isAge = true;
    }
}
Nach dem Login kopieren

3 Methode Bestimmen Sie, ob der Text characters

erhalten werden soll. Denken Sie abschließend daran, die beiden booleschen Variablen auf „false“ zurückzusetzen.
@Overridepublic void characters(char[] ch, int start, int length)        throws SAXException {    // 显示文本内容
    String text = new String(ch,start,length);    if(!text.trim().equals("")&&(isName||isAge)){
        System.out.println(text);
    }
    isName = false;
    isAge = false;
}
Nach dem Login kopieren
Nach dem Login kopieren
Die laufenden Ergebnisse sind wie folgt:


XML – SAX für XML-Parsing

1. SAX-Analyse

    Verwenden von DOM to XML-Dokumente analysieren Dabei müssen Sie das gesamte XML-Dokument lesen, das Document-Objekt des gesamten DOM-Baums im Speicher erstellen und dann das XML-Dokument bearbeiten. Wenn das XML-Dokument in diesem Fall besonders groß ist, verbraucht es viel Computerspeicher und kann in schweren Fällen zu einem Speicherüberlauf führen.
  • SAX-Parsing ermöglicht die Verarbeitung des Dokuments beim Lesen des Dokuments, ohne warten zu müssen, bis das gesamte Dokument geladen ist.
  • Entwickeln Sie einen SAX-Parser durch Vererbung
  • DefaultHandler

[Hinweis] SAX main Es wird verwendet zum Parsen von XML-Dokumenten und kann keine Elemente ändern, löschen oder hinzufügen.

1.1. SAX-Parsing-Mechanismus

Sax ist ein Push-Mechanismus, Sie erstellen einen Sax-Parser, der Ihnen sagt, wann Es findet den Inhalt im XML-Dokument (und sendet das Ereignis an Sie weiter, ähnlich wie das Abhören von Ereignissen in Java Swing). Es ist Sache des Programmierers, zu entscheiden, was mit diesen Erkenntnissen geschehen soll.

In Saxophon-basierten Programmen gibt es fünf am häufigsten verwendete Saxophon-Events:

1.startDocument()–>告诉你解析器发现了文档的开始,告诉你解析器开始扫描文档
2.endDocument()–>告诉你解析器发现了文档结尾
3.startElement()–>告诉你解析器发现了一个起始标签,该事件告诉你标签的名称、该元素所有的属性名和值
4.characters()–>告诉你解析器发现了一些文本,将得到一个字符数组,该数组的偏移量和一个长度偏移量,有这三个变量你可以得到解析器发现的文本
5.endElement()–>告诉你解析器发现了一个结束标签,该事件告诉你元素的名称

1.2.SAX解析实例

依然使用DOM解析中用到的XML例子,如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?><班级>
    <学生 地址="香港">
        <名字>周小星</名字>
        <年龄>23</年龄>
        <介绍>学习刻苦</介绍>
    </学生>
    <学生 地址="澳门">
        <名字>林晓</名字>
        <年龄>25</年龄>
        <介绍>是一个好学生</介绍>
    </学生></班级>
Nach dem Login kopieren
Nach dem Login kopieren

【步骤】:

1.使用SAXParserFactory创建SAX解析工厂

SAXParserFactory spf = SAXParserFactory.newInstance();
Nach dem Login kopieren
Nach dem Login kopieren

2.通过SAX解析工厂得到解析器对象

SAXParser sp = spf.newSAXParser();
Nach dem Login kopieren
Nach dem Login kopieren

3.将解析对象和事件处理器对象关联

sp.parse("src/myClass.xml",new MyHandler());
Nach dem Login kopieren
Nach dem Login kopieren

这里的MyHandler需要自己定义,并且它要继承DefaultHandler,然后在MyHandler类中重写上文提到的5个sax事件方法,当然也可以只重写自己需要的。
比如现在我写的MyHandler如下:

class MyHandler extends DefaultHandler{    /**
     * 发现文档开始,该函数只会被调用一次
     */
    @Override
    public void startDocument() throws SAXException {
        System.out.println("startDocument");
    }    /**
     * 发现文档结束,该函数只会被调用一次
     */
    @Override
    public void endDocument() throws SAXException {
        System.out.println("endDocument");
    }    /**
     * 发现XML中的一个元素开始,会被反复调用
     */
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.println("元素名称:"+qName);
    }    /**
     * 发现XML中的一个元素结束,会被反复调用
     */
    @Override
    public void endElement(String uri, String localName, String qName)            
    throws SAXException {

    }    /**
     * 发现XML文件中的文本,会被反复调用
     */
    @Override
    public void characters(char[] ch, int start, int length)            
    throws SAXException {        // 显示文本内容
        String text = new String(ch,start,length);        
        if(!text.trim().equals("")){
            System.out.println(text);
        }
    }
}
Nach dem Login kopieren

运行结果如下:

XML – SAX für XML-Parsing

可以看到,这是对XML文档的一种遍历,而sax能够做的也只是遍历了。


那么,如果现在我们有这样一个需求:只显示所有学生的姓名和年龄,不显示学生的介绍,怎么实现呢?

我们可以在MyHandler类中定义两个布尔变量isName和isAge,在startElement方法中标识是否是姓名元素或者年龄元素,如果是的话才在characters方法中获取对应的文本,如下:

1.定义两个布尔变量

private boolean isName = false;private boolean isAge = false;
Nach dem Login kopieren
Nach dem Login kopieren

2.在startElement方法中添加判断

@Overridepublic void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {    if(qName.equals("名字")){        
        this.isName = true;
    }else if(qName.equals("年龄")){        this.isAge = true;
    }
}
Nach dem Login kopieren

3.在characters方法中根据标识符进行判断是否获取文本

@Overridepublic void characters(char[] ch, int start, int length)        throws SAXException {    // 显示文本内容
    String text = new String(ch,start,length);    if(!text.trim().equals("")&&(isName||isAge)){
        System.out.println(text);
    }
    isName = false;
    isAge = false;
}
Nach dem Login kopieren
Nach dem Login kopieren

最后要记得将两个布尔变量复位成false。
运行结果如下:

XML – SAX für XML-Parsing

 以上就是XML—XML解析之SAX的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Kann ich eine XML-Datei mit PowerPoint öffnen? Kann ich eine XML-Datei mit PowerPoint öffnen? Feb 19, 2024 pm 09:06 PM

Können XML-Dateien mit PPT geöffnet werden? XML, Extensible Markup Language (Extensible Markup Language), ist eine universelle Auszeichnungssprache, die häufig im Datenaustausch und in der Datenspeicherung verwendet wird. Im Vergleich zu HTML ist XML flexibler und kann eigene Tags und Datenstrukturen definieren, wodurch die Speicherung und der Austausch von Daten komfortabler und einheitlicher werden. PPT oder PowerPoint ist eine von Microsoft entwickelte Software zum Erstellen von Präsentationen. Es bietet eine umfassende Möglichkeit

Verwendung von Python zum Zusammenführen und Deduplizieren von XML-Daten Verwendung von Python zum Zusammenführen und Deduplizieren von XML-Daten Aug 07, 2023 am 11:33 AM

Verwenden von Python zum Zusammenführen und Deduplizieren von XML-Daten XML (eXtensibleMarkupLanguage) ist eine Auszeichnungssprache, die zum Speichern und Übertragen von Daten verwendet wird. Bei der Verarbeitung von XML-Daten müssen wir manchmal mehrere XML-Dateien zu einer zusammenführen oder doppelte Daten entfernen. In diesem Artikel wird erläutert, wie Sie mit Python die Zusammenführung und Deduplizierung von XML-Daten implementieren und entsprechende Codebeispiele angeben. 1. XML-Daten zusammenführen Wenn wir mehrere XML-Dateien haben, müssen wir sie zusammenführen

XML-Daten mit Python filtern und sortieren XML-Daten mit Python filtern und sortieren Aug 07, 2023 pm 04:17 PM

Implementieren des Filterns und Sortierens von XML-Daten mit Python Einführung: XML ist ein häufig verwendetes Datenaustauschformat, das Daten in Form von Tags und Attributen speichert. Bei der Verarbeitung von XML-Daten müssen wir die Daten häufig filtern und sortieren. Python bietet viele nützliche Tools und Bibliotheken zum Verarbeiten von XML-Daten. In diesem Artikel wird erläutert, wie Sie mit Python XML-Daten filtern und sortieren. Lesen der XML-Datei Bevor wir beginnen, müssen wir die XML-Datei lesen. Python verfügt über viele XML-Verarbeitungsbibliotheken.

Konvertieren Sie XML-Daten in Python in das CSV-Format Konvertieren Sie XML-Daten in Python in das CSV-Format Aug 11, 2023 pm 07:41 PM

Konvertieren Sie XML-Daten in Python in das CSV-Format. XML (ExtensibleMarkupLanguage) ist eine erweiterbare Auszeichnungssprache, die häufig zur Datenspeicherung und -übertragung verwendet wird. CSV (CommaSeparatedValues) ist ein durch Kommas getrenntes Textdateiformat, das häufig für den Datenimport und -export verwendet wird. Bei der Datenverarbeitung ist es manchmal erforderlich, XML-Daten zur einfachen Analyse und Verarbeitung in das CSV-Format zu konvertieren. Python ist mächtig

Importieren Sie XML-Daten mit PHP in die Datenbank Importieren Sie XML-Daten mit PHP in die Datenbank Aug 07, 2023 am 09:58 AM

Importieren von XML-Daten in die Datenbank mit PHP Einführung: Während der Entwicklung müssen wir häufig externe Daten zur weiteren Verarbeitung und Analyse in die Datenbank importieren. Als häufig verwendetes Datenaustauschformat wird XML häufig zum Speichern und Übertragen strukturierter Daten verwendet. In diesem Artikel wird erläutert, wie Sie mit PHP XML-Daten in eine Datenbank importieren. Schritt 1: XML-Datei analysieren Zuerst müssen wir die XML-Datei analysieren und die erforderlichen Daten extrahieren. PHP bietet mehrere Möglichkeiten zum Parsen von XML. Die am häufigsten verwendete davon ist die Verwendung von Simple

Python implementiert die Konvertierung zwischen XML und JSON Python implementiert die Konvertierung zwischen XML und JSON Aug 07, 2023 pm 07:10 PM

Python implementiert die Konvertierung zwischen XML und JSON. Einführung: Im täglichen Entwicklungsprozess müssen wir häufig Daten zwischen verschiedenen Formaten konvertieren. XML und JSON sind gängige Datenaustauschformate. In Python können wir verschiedene Bibliotheken zum Konvertieren zwischen XML und JSON verwenden. In diesem Artikel werden mehrere häufig verwendete Methoden mit Codebeispielen vorgestellt. 1. Um XML in Python in JSON zu konvertieren, können wir das Modul xml.etree.ElementTree verwenden

Behandeln von Fehlern und Ausnahmen in XML mit Python Behandeln von Fehlern und Ausnahmen in XML mit Python Aug 08, 2023 pm 12:25 PM

Behandeln von Fehlern und Ausnahmen in XML mit Python XML ist ein häufig verwendetes Datenformat zum Speichern und Darstellen strukturierter Daten. Wenn wir Python zum Verarbeiten von XML verwenden, können manchmal Fehler und Ausnahmen auftreten. In diesem Artikel werde ich die Verwendung von Python zur Behandlung von Fehlern und Ausnahmen in XML vorstellen und einige Beispielcodes als Referenz bereitstellen. Verwenden Sie Try-Exception-Anweisungen, um XML-Parsing-Fehler abzufangen. Wenn wir Python zum Parsen von XML verwenden, können manchmal Fehler auftreten

Python analysiert Sonderzeichen und Escape-Sequenzen in XML Python analysiert Sonderzeichen und Escape-Sequenzen in XML Aug 08, 2023 pm 12:46 PM

Python analysiert Sonderzeichen und Escape-Sequenzen in XML. XML (eXtensibleMarkupLanguage) ist ein häufig verwendetes Datenaustauschformat, das zum Übertragen und Speichern von Daten zwischen verschiedenen Systemen verwendet wird. Bei der Verarbeitung von XML-Dateien kommt es häufig vor, dass Sonderzeichen und Escape-Sequenzen enthalten sind, die zu Analysefehlern oder einer Fehlinterpretation der Daten führen können. Daher müssen wir beim Parsen von XML-Dateien mit Python verstehen, wie mit diesen Sonderzeichen und Escape-Sequenzen umgegangen wird. 1. Sonderzeichen und

See all articles