Table des matières
1. Analyse SAX
1.1. Mécanisme d'analyse SAX
Exemple d'analyse SAX
Sax est un mécanisme push, vous créez un analyseur sax, analyseur Il vous dira quand il trouve le contenu dans le document XML (en vous poussant l'événement, un peu similaire à l'écoute d'événement dans Java Swing). C'est au programmeur de décider quoi faire de ces résultats.
1.2.SAX解析实例
Maison développement back-end Tutoriel XML/RSS XML : SAX pour l'analyse XML

XML : SAX pour l'analyse XML

Feb 24, 2017 pm 03:06 PM

1. Analyse SAX

  • Lorsque vous utilisez DOM pour analyser un document XML, vous devez lire l'intégralité du document XML et créer il en mémoire Objet document de l'ensemble de l'arborescence DOM, afin d'exploiter le document XML. Dans ce cas, si le document XML est particulièrement volumineux, il consommera beaucoup de mémoire de l'ordinateur et, dans les cas graves, pourra provoquer un débordement de mémoire.

  • L'analyse SAX permet de traiter le document lors de sa lecture, sans avoir à attendre que l'intégralité du document soit chargée.

  • Développer un analyseur SAX en héritant de DefaultHandler

[Note] SAX main Il est utilisé pour analyser les documents XML et ne peut pas modifier, supprimer ou ajouter des éléments.

1.1. Mécanisme d'analyse SAX

Sax est un mécanisme push, vous créez un analyseur Sax, l'analyseur vous dira quand il trouvera le contenu dans le document XML (en vous envoyant l'événement, un peu similaire à l'écoute d'événement dans Java Swing). C'est au programmeur de décider quoi faire de ces résultats.

Dans les programmes basés sur Sax, il existe cinq événements Sax les plus couramment utilisés :

1.startDocument()–> indique que votre analyseur commence à numériser le document
2.endDocument()–> vous indique que l'analyseur a trouvé la fin du document
3.startElement()–> vous indique que l'analyseur a trouvé une balise de début. Cet événement vous indique le nom de la balise, tous les noms d'attributs et les valeurs de l'élément
. 4.characters()–> vous indique que l'analyseur a trouvé du texte, vous obtiendrez un tableau de caractères, le décalage du tableau et un décalage de longueur. Avec ces trois variables, vous pouvez obtenir le texte trouvé par l'analyseur
. 5.endElement()–> vous indique que l'analyseur a trouvé une balise de fin. Cet événement vous indique le nom de l'élément

Exemple d'analyse SAX

.

Toujours en utilisant l'exemple XML utilisé dans l'analyse DOM, comme suit :

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

[Étapes] :

1 Utilisez SAXParserFactory pour créer une analyse SAX. factory

SAXParserFactory spf = SAXParserFactory.newInstance();
Copier après la connexion
Copier après la connexion

2. Obtenez l'objet analyseur via l'usine d'analyse SAX

SAXParser sp = spf.newSAXParser();
Copier après la connexion
Copier après la connexion

3. Associez l'objet d'analyse à l'objet gestionnaire d'événements

sp.parse("src/myClass.xml",new MyHandler());
Copier après la connexion
Copier après la connexion

iciMyHandler Vous devez le définir vous-même, et il doit hériter de DefaultHandler, puis réécrire les cinq méthodes d'événements sax mentionnées ci-dessus dans la classe MyHandler. Bien sûr, vous pouvez également simplement remplacer ce dont vous avez besoin.
Par exemple, le MyHandler que j'ai écrit maintenant est le suivant :

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);
        }
    }
}
Copier après la connexion

Le résultat en cours d'exécution est le suivant :

XML : SAX pour lanalyse XML

Comme vous Je peux voir, c'est un document XML. Une sorte de traversée, et tout ce que Sax peut faire, c'est traverser.


Donc, si nous avons maintenant une telle exigence : 只显示所有学生的姓名和年龄,不显示学生的介绍,怎么实现呢?

Nous pouvons définir deux variables booléennes isName et isAge dans la classe MyHandler , identifiez s'il s'agit d'un élément name ou d'un élément age dans la méthode startElement. Si tel est le cas, obtenez le texte correspondant dans la méthode characters, comme suit :

1. Définissez deux variables booléennes<. 🎜>

private boolean isName = false;private boolean isAge = false;
Copier après la connexion
Copier après la connexion

2. Ajouter un jugement dans la méthode 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;
    }
}
Copier après la connexion

3. méthode Déterminer s'il faut obtenir le texte characters

Enfin, pensez à remettre les deux variables booléennes à false.
@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;
}
Copier après la connexion
Copier après la connexion
Les résultats en cours sont les suivants :


XML : SAX pour lanalyse XML

1. Analyse SAX

    Utilisation de DOM pour. analyser les documents XML Pour ce faire, vous devez lire l'intégralité du document XML, créer l'objet Document de l'intégralité de l'arborescence DOM en mémoire, puis opérer sur le document XML. Dans ce cas, si le document XML est particulièrement volumineux, il consommera beaucoup de mémoire informatique et, dans les cas graves, pourra même provoquer un débordement de mémoire.
  • L'analyse SAX permet de traiter le document lors de sa lecture, sans avoir à attendre que l'intégralité du document soit chargée.
  • Développer un analyseur SAX en héritant de
  • DefaultHandler

[Note] SAX main Il est utilisé pour analyser les documents XML et ne peut pas modifier, supprimer ou ajouter des éléments.

1.1. Mécanisme d'analyse SAX

Sax est un mécanisme push, vous créez un analyseur sax, analyseur Il vous dira quand il trouve le contenu dans le document XML (en vous poussant l'événement, un peu similaire à l'écoute d'événement dans Java Swing). C'est au programmeur de décider quoi faire de ces résultats.

Dans les programmes basés sur le saxophone, il existe cinq événements de sax les plus couramment utilisés :

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</年龄>
        <介绍>是一个好学生</介绍>
    </学生></班级>
Copier après la connexion
Copier après la connexion

【步骤】:

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

SAXParserFactory spf = SAXParserFactory.newInstance();
Copier après la connexion
Copier après la connexion

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

SAXParser sp = spf.newSAXParser();
Copier après la connexion
Copier après la connexion

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

sp.parse("src/myClass.xml",new MyHandler());
Copier après la connexion
Copier après la connexion

这里的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);
        }
    }
}
Copier après la connexion

运行结果如下:

XML : SAX pour lanalyse XML

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


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

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

1.定义两个布尔变量

private boolean isName = false;private boolean isAge = false;
Copier après la connexion
Copier après la connexion

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;
    }
}
Copier après la connexion

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;
}
Copier après la connexion
Copier après la connexion

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

XML : SAX pour lanalyse XML

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


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Puis-je ouvrir un fichier XML à l'aide de PowerPoint ? Puis-je ouvrir un fichier XML à l'aide de PowerPoint ? Feb 19, 2024 pm 09:06 PM

Les fichiers XML peuvent-ils être ouverts avec PPT ? XML, Extensible Markup Language (Extensible Markup Language), est un langage de balisage universel largement utilisé dans l'échange et le stockage de données. Comparé au HTML, XML est plus flexible et peut définir ses propres balises et structures de données, rendant le stockage et l'échange de données plus pratiques et unifiés. PPT, ou PowerPoint, est un logiciel développé par Microsoft pour créer des présentations. Il fournit un moyen complet de

Utiliser Python pour fusionner et dédupliquer des données XML Utiliser Python pour fusionner et dédupliquer des données XML Aug 07, 2023 am 11:33 AM

Utilisation de Python pour fusionner et dédupliquer des données XML XML (eXtensibleMarkupLanguage) est un langage de balisage utilisé pour stocker et transmettre des données. Lors du traitement de données XML, nous devons parfois fusionner plusieurs fichiers XML en un seul ou supprimer les données en double. Cet article explique comment utiliser Python pour implémenter la fusion et la déduplication de données XML, et donne des exemples de code correspondants. 1. Fusion de données XML Lorsque nous avons plusieurs fichiers XML, nous devons les fusionner

Filtrage et tri des données XML à l'aide de Python Filtrage et tri des données XML à l'aide de Python Aug 07, 2023 pm 04:17 PM

Implémentation du filtrage et du tri des données XML à l'aide de Python Introduction : XML est un format d'échange de données couramment utilisé qui stocke les données sous forme de balises et d'attributs. Lors du traitement de données XML, nous devons souvent filtrer et trier les données. Python fournit de nombreux outils et bibliothèques utiles pour traiter les données XML. Cet article explique comment utiliser Python pour filtrer et trier les données XML. Lecture du fichier XML Avant de commencer, nous devons lire le fichier XML. Python possède de nombreuses bibliothèques de traitement XML,

Convertir des données XML au format CSV en Python Convertir des données XML au format CSV en Python Aug 11, 2023 pm 07:41 PM

Convertir des données XML en Python au format CSV XML (ExtensibleMarkupLanguage) est un langage de balisage extensible couramment utilisé pour le stockage et la transmission de données. CSV (CommaSeparatedValues) est un format de fichier texte délimité par des virgules couramment utilisé pour l'importation et l'exportation de données. Lors du traitement des données, il est parfois nécessaire de convertir les données XML au format CSV pour faciliter l'analyse et le traitement. Python est un puissant

Importer des données XML dans une base de données à l'aide de PHP Importer des données XML dans une base de données à l'aide de PHP Aug 07, 2023 am 09:58 AM

Importation de données XML dans la base de données à l'aide de PHP Introduction : Pendant le développement, nous devons souvent importer des données externes dans la base de données pour un traitement et une analyse ultérieurs. En tant que format d'échange de données couramment utilisé, XML est souvent utilisé pour stocker et transmettre des données structurées. Cet article explique comment utiliser PHP pour importer des données XML dans une base de données. Étape 1 : analyser le fichier XML Tout d'abord, nous devons analyser le fichier XML et extraire les données requises. PHP propose plusieurs façons d'analyser XML, la plus couramment utilisée étant l'utilisation de Simple

Python implémente la conversion entre XML et JSON Python implémente la conversion entre XML et JSON Aug 07, 2023 pm 07:10 PM

Python implémente la conversion entre XML et JSON Introduction : Dans le processus de développement quotidien, nous devons souvent convertir des données entre différents formats. XML et JSON sont des formats d'échange de données courants. En Python, nous pouvons utiliser diverses bibliothèques pour réaliser une conversion mutuelle entre XML et JSON. Cet article présentera plusieurs méthodes couramment utilisées, avec des exemples de code. 1. Pour convertir XML en JSON en Python, nous pouvons utiliser le module xml.etree.ElementTree

Gestion des erreurs et des exceptions en XML à l'aide de Python Gestion des erreurs et des exceptions en XML à l'aide de Python Aug 08, 2023 pm 12:25 PM

Gestion des erreurs et des exceptions dans XML à l'aide de Python XML est un format de données couramment utilisé pour stocker et représenter des données structurées. Lorsque nous utilisons Python pour traiter XML, nous pouvons parfois rencontrer des erreurs et des exceptions. Dans cet article, je vais vous présenter comment utiliser Python pour gérer les erreurs et les exceptions dans XML, et fournir un exemple de code pour référence. Utilisez l'instruction try-sauf pour détecter les erreurs d'analyse XML Lorsque nous utilisons Python pour analyser XML, nous pouvons parfois rencontrer des

Python analyse les caractères spéciaux et les séquences d'échappement en XML Python analyse les caractères spéciaux et les séquences d'échappement en XML Aug 08, 2023 pm 12:46 PM

Python analyse les caractères spéciaux et les séquences d'échappement en XML XML (eXtensibleMarkupLanguage) est un format d'échange de données couramment utilisé pour transférer et stocker des données entre différents systèmes. Lors du traitement de fichiers XML, vous rencontrez souvent des situations contenant des caractères spéciaux et des séquences d'échappement, qui peuvent provoquer des erreurs d'analyse ou une mauvaise interprétation des données. Par conséquent, lors de l’analyse de fichiers XML à l’aide de Python, nous devons comprendre comment gérer ces caractères spéciaux et ces séquences d’échappement. 1. Caractères spéciaux et

See all articles