Heim > Artikel > Backend-Entwicklung > Beispielcode, der drei Methoden zum Parsen von XML-Daten detailliert beschreibt
Ein Überblick
Xml als Dateninteraktionsformat umfasst die Generierung und Analyse von XML-Daten. Hier werden drei Methoden der XML-Analyse beschrieben.
2. Dom-Parsing
1. Erstellen Sie ein Parser-Factory-Objekt (DocumentBuilderFactory-Objekt)
3. Erstellen Sie ein Dokumentobjekt
Parsen Sie beispielsweise die folgende Datei
Der Parsing-Code lautet wie folgt<?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>3. Notizen
[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); } } }
1. Element ele = doc.getDocumentElement(); Holen Sie sich das Stammelement
2. Wenn das Element abgerufen wird, ist der Wert des Elements auch ein Knoten, und der Wert muss von element.getFirstChild abgerufen werden ().getNodeValue()-Methode.
3. Die Leerzeichen in XML sind ebenfalls vom Typ Knoten und Text.
4. SAX-Parsing
1. Erstellen Sie ein SAXParser-Objekt
3. Erstellen Sie einen MyHandler, der die DefaultHandler-Klasse erbt und überschreibt die Methode.
4. sp.parse(new File("student.xml"), new MyHandler(list));
SAX basiert auf dem Ereignismodell, das intern sequentiell analysiert wird Die Implementierung ist der Beobachtermodus. Der Vorteil besteht darin, dass er weniger Speicher beansprucht und sehr effizient ist. Der Nachteil besteht darin, dass die Codierung relativ kompliziert ist. 5. Pull-Parsing[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("解析文档结束了....."); } }
1. Diese Parsing-Methode ist nicht im JDK enthalten und muss eine Bibliothek eines Drittanbieters importieren
2. Erstellen Sie ein XmlPullParserFactory-Objekt
3, XmlPullParser-Objekt erstellen
4. Rufen Sie xpp.setInput(is, „utf-8“) auf
5. Verarbeiten Sie den nächsten Ereignistyp von xpp.next() der Veranstaltungstyp
Das obige ist der detaillierte Inhalt vonBeispielcode, der drei Methoden zum Parsen von XML-Daten detailliert beschreibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!