


Exemple de code qui détaille trois méthodes d'analyse des données XML
Un aperçu
Xml, en tant que format d'interaction de données, implique la génération et l'analyse de données XML. Nous décrirons ici trois méthodes d'analyse XML.
2. Analyse Dom
1. Créer un objet d'usine d'analyseur (objet DocumentBuilderFactory)
2. Créer un objet d'analyseur (DocumentBuilder)
3. Créez un objet Document
Par exemple, analysez le fichier suivant
<?xml version="1.0" encoding="utf-8"?> <students> <student id = "1001"> <id>1</id> <name>杨威</name> <address>大连</address> <age>21</age> </student> <student id = "1002"> <id>2</id> <name>劉海洋</name> <address>深圳</address> <age>23</age> </student> <student id = "1003"> <id>3</id> <name>王小波</name> <address>廣州</address> <age>22</age> </student> </students>
Le code d'analyse est le suivant
[code]package com.kuxiao.train.xml; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class XmlParseTest { public static void main(String[] args) throws Exception { //xml doc解析步骤 //1、获取解析工厂对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //2、构建解析器对象 DocumentBuilder db = dbf.newDocumentBuilder(); //3、构建docment对象 Document doc = db.parse(new File("person.xml")); Element ele = doc.getDocumentElement(); //实现解析逻辑 NodeList list = doc.getElementsByTagName("student"); for(int i = 0; i < list.getLength();i++) { Element element = (Element) list.item(i); String attrid = element.getAttribute("id"); System.out.println("attrid = " + attrid); Element element1 = (Element) element.getElementsByTagName("id").item(0); String id = element1.getFirstChild().getNodeValue(); System.out.println(id); element1 = (Element) element.getElementsByTagName("name").item(0); String name = element1.getFirstChild().getNodeValue(); System.out.println(name); element1 = (Element) element.getElementsByTagName("address").item(0); String address = element1.getFirstChild().getNodeValue(); System.out.println(address); } } }
Notes
1. Element ele = doc.getDocumentElement(); Obtenir l'élément racine
2. Lorsque l'élément est obtenu, la valeur de l'élément est également un nœud, et la valeur doit être obtenue par element.getFirstChild ().Méthode getNodeValue().
3. Les espaces vides en XML sont également de type Node et Text.
4. Analyse SAX
1. Créez un objet SAXParserFactory
2 Créez un objet SAXparser
3. Créez un MyHandler qui hérite de la classe DefaultHandler. et remplace la méthode.
4. sp.parse(new File("student.xml"), new MyHandler(list));
[code]package com.kuxiao.train.xml.sax; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Stack; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class TestSax { public static void main(String[] args) throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); List<Student> list = new ArrayList<>(); sp.parse(new File("student.xml"), new MyHandler(list)); System.out.println(list); } } class MyHandler extends DefaultHandler { private Stack<String> stack = new Stack<>(); private Student student; private List<Student> mList = null; public MyHandler(List<Student> list) { this.mList = list; } @Override public void startDocument() throws SAXException { System.out.println("解析文档开始了..."); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(qName.equals("学生")) { student = new Student(); if(attributes.getLength() != 0) { for(int i = 0; i < attributes.getLength();i++) { String id = attributes.getValue(i); student.setId(Integer.parseInt(id)); } } } /*if(qName.equals("姓名")) { stack.push(qName); } if(qName.equals("年龄")) { stack.push(qName); } if(qName.equals("性别")) { stack.push(qName); }*/ stack.push(qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { String qName = stack.peek(); if(qName.equals("性别")){ student.setGender(new String(ch,start,length)); } if(qName.equals("姓名")){ student.setName(new String(ch,start,length)); } if(qName.equals("年龄")){ student.setAge(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { stack.pop(); if(qName.equals("学生")) { mList.add(student); student = null; } } @Override public void endDocument() throws SAXException { System.out.println("解析文档结束了....."); } }
SAX est basé sur le modèle d'événement, analysé séquentiellement, en interne L'implémentation est le mode observateur. L'avantage est qu'il prend moins de mémoire et est très efficace. L'inconvénient est que le codage est relativement compliqué.
5. Analyse pull
1. Cette méthode d'analyse n'est pas fournie avec JDK et doit importer une bibliothèque tierce
2. Créez un objet XmlPullParserFactory
.3, Créez un objet XmlPullParser
4. Appelez xpp.setInput(is, "utf-8")
5. Traitez le type d'événement suivant de xpp.next() correspondant à le type d'événement
[code]package com.kuxiao.train.xml.pull; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; public class PullTest { public static void main(String[] args) throws Exception { FileInputStream is = new FileInputStream(new File("person.xml")); long time = System.currentTimeMillis(); List<Student> list = new ArrayList<>(); XmlPullParserFactory xppf = XmlPullParserFactory.newInstance(); XmlPullParser xpp = xppf.newPullParser(); xpp.setInput(is, "utf-8"); Student student = null; int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: if (xpp.getName().equals("student")) { student = new Student(); String id = xpp.getAttributeValue(0); student.setId(id); } else if (xpp.getName().equals("name")) { student.setName(xpp.nextText()); } else if (xpp.getName().equals("address")) { student.setAddress(xpp.nextText()); } else if (xpp.getName().equals("age")) { student.setAge(xpp.nextText()); } break; case XmlPullParser.START_DOCUMENT: System.out.println("开始了...."); break; case XmlPullParser.END_TAG: if (xpp.getName().equals("student")) { list.add(student); student = null; } break; } eventType = xpp.next(); } is.close(); long time1 = System.currentTimeMillis(); System.out.println(time1 - time); for (Student student2 : list) { System.out.println(student2); } FileInputStream fis = new FileInputStream(new File("person.xml")); List<Student> list1 = getListBean(fis, new String[] { "id", "name", "address", "age", "gender" }, Student.class, 0); for (Student student2 : list1) { System.out.println(student2); } } //封装的全能解析xml文件的方法 //参数说明 //attrs是文件里bean对象的元素与属性名 //clazz是Bean对象的class对象 //j代表属性的个数 public static <T> List<T> getListBean(InputStream is, String[] attrs, Class<T> clazz, int j) throws Exception { long time = System.currentTimeMillis(); T c = null; XmlPullParserFactory xppf = XmlPullParserFactory.newInstance(); XmlPullParser xpp = xppf.newPullParser(); xpp.setInput(is, "utf-8"); List<T> list = null; int eventType = xpp.getEventType(); String classname = ""; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: int bigen = clazz.getName().lastIndexOf(".") + 1; classname = clazz.getName().substring(bigen); classname = classname.substring(0, 1).toLowerCase() + classname.substring(1); String elementName = xpp.getName(); if (classname.equals(elementName)) { c = clazz.newInstance(); if (xpp.getAttributeCount() != 0) { for (int i = 0; i < j; i++) { String attrName = xpp.getAttributeName(i); for (String field : attrs) { if (field.equals(attrName)) { String frist = field.substring(0, 1) .toUpperCase(); Method method = clazz.getDeclaredMethod( "set" + frist + field.substring(1), new Class[] { String.class }); method.setAccessible(true); method.invoke(c, xpp.getAttributeValue(i)); } } } } } else { for (String field : attrs) { if (field.equals(elementName)) { String frist = field.substring(0, 1).toUpperCase(); Method method = clazz.getDeclaredMethod("set" + frist + field.substring(1), new Class[] { String.class }); method.setAccessible(true); method.invoke(c, xpp.nextText()); } } } break; case XmlPullParser.START_DOCUMENT: list = new ArrayList<T>(); break; case XmlPullParser.END_TAG: if (!classname.equals("") && classname.equals(xpp.getName())) { list.add(c); c = null; } break; } eventType = xpp.next(); } is.close(); long time1 = System.currentTimeMillis(); System.out.println(time1 - time); return list; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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

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

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,

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

La gestion des formats de données XML et JSON dans le développement C# nécessite des exemples de code spécifiques. Dans le développement de logiciels modernes, XML et JSON sont deux formats de données largement utilisés. XML (Extensible Markup Language) est un langage de balisage permettant de stocker et de transmettre des données, tandis que JSON (JavaScript Object Notation) est un format d'échange de données léger. Dans le développement C#, nous devons souvent traiter et exploiter des données XML et JSON. Cet article se concentrera sur la façon d'utiliser C# pour traiter ces deux formats de données et les attacher.
