In Java gibt es zwei Möglichkeiten, XML-Dokumente nativ zu analysieren: Dom-Parsing und Sax-Parsing
Dom-Parsing ist leistungsstark und kann hinzugefügt, gelöscht, geändert und überprüft werden. Das XML-Dokument wird behandelt Als Dokumentobjekt während des Betriebs Die Methode wird in den Speicher eingelesen und eignet sich daher für kleine Dokumente
Sax-Parsing liest den Inhalt Zeile für Zeile und Element für Element von Anfang bis Ende. Das Ändern ist umständlicher , aber es ist für große schreibgeschützte Dokumente geeignet
In diesem Artikel wird hauptsächlich das Sax-Parsen erläutert, der Rest wird zurückgelassen
Sax verwendet einen ereignisgesteuerten Ansatz zum Parsen von Dokumenten. Um es einfach auszudrücken: Es ist, als würde man einen Film im Kino ansehen. Man kann ihn von Anfang bis Ende ansehen, ohne zurückzugehen (Dom kann ihn hin und her lesen). Wenn Sie auf eine Verschwörung stoßen, auf einen Riss oder auf eine Schulterreibung, werden Sie Ihr Gehirn und Ihre Nerven mobilisieren, um diese Informationen zu empfangen oder zu verarbeiten. und der Anfang und das Ende des Elements lösen einige Rückrufmethoden aus. Sie können in diesen Rückrufmethoden eine entsprechende Ereignisverarbeitung durchführen
Die vier Methoden sind: startDocument(), endDocument(), startElement(), endElement
Außerdem reicht es nicht aus, zum Knoten zu gehen. Wir benötigen auch die Methode „characters()“, um den im Element enthaltenen Inhalt sorgfältig zu verarbeiten.
Durch das Sammeln dieser Rückrufmethoden wird eine Klasse erstellt wird gebildet, was der Trigger ist, den wir benötigen.
Im Allgemeinen wird das Dokument von der Main-Methode gelesen, aber das Dokument wird im Trigger verarbeitet. Dies ist die sogenannte ereignisgesteuerte Analysemethode
Wie oben gezeigt, beginnen Sie im Trigger zunächst mit dem Lesen des Dokuments und beginnen dann mit dem Parsen der Elemente nacheinander. Der Inhalt jedes Elements wird an die Zeichen zurückgegeben (). Methodeund beenden Sie dann das Lesen der Elemente. Nachdem alle Elemente gelesen wurden, beenden Sie das Parsen des Dokuments
Jetzt beginnen wir mit der Erstellung der Triggerklasse. Um diese Klasse zu erstellen, müssen wir zunächst erben DefaultHandler
zum Erstellen von SaxHandler und Überschreiben der entsprechenden Methode:
XML-Dokument :import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxHandler extends DefaultHandler { /* 此方法有三个参数 arg0是传回来的字符数组,其包含元素内容 arg1和arg2分别是数组的开始位置和结束位置 */ @Override public void characters(char[] arg0, int arg1, int arg2) throws SAXException { String content = new String(arg0, arg1, arg2); System.out.println(content); super.characters(arg0, arg1, arg2); } @Override public void endDocument() throws SAXException { System.out.println("\n…………结束解析文档…………"); super.endDocument(); } /* arg0是名称空间 arg1是包含名称空间的标签,如果没有名称空间,则为空 arg2是不包含名称空间的标签 */ @Override public void endElement(String arg0, String arg1, String arg2) throws SAXException { System.out.println("结束解析元素 " + arg2); super.endElement(arg0, arg1, arg2); } @Override public void startDocument() throws SAXException { System.out.println("…………开始解析文档…………\n"); super.startDocument(); } /*arg0是名称空间 arg1是包含名称空间的标签,如果没有名称空间,则为空 arg2是不包含名称空间的标签 arg3很明显是属性的集合 */ @Override public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException { System.out.println("开始解析元素 " + arg2); if (arg3 != null) { for (int i = 0; i < arg3.getLength(); i++) { // getQName()是获取属性名称, System.out.print(arg3.getQName(i) + "=\"" + arg3.getValue(i) + "\""); } } System.out.print(arg2 + ":"); super.startElement(arg0, arg1, arg2, arg3); } }
<?xml version="1.0" encoding="UTF-8"?> <books> <book id="001"> <title>Harry Potter</title> <author>J K. Rowling</author> </book> <book id="002"> <title>Learning XML</title> <author>Erik T. Ray</author> </book> </books>
import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class TestDemo { public static void main(String[] args) throws Exception { // 1.实例化SAXParserFactory对象 SAXParserFactory factory = SAXParserFactory.newInstance(); // 2.创建解析器 SAXParser parser = factory.newSAXParser(); // 3.获取需要解析的文档,生成解析器,最后解析文档 File f = new File("books.xml"); SaxHandler dh = new SaxHandler(); parser.parse(f, dh); } }
…………开始解析文档………… 开始解析元素 books books: 开始解析元素 book id="001"book: 开始解析元素 title title:Harry Potter 结束解析元素 title 开始解析元素 author author:J K. Rowling 结束解析元素 author 结束解析元素 book 开始解析元素 book id="002"book: 开始解析元素 title title:Learning XML 结束解析元素 title 开始解析元素 author author:Erik T. Ray 结束解析元素 author 结束解析元素 book 结束解析元素 books …………结束解析文档…………
Umgeschriebene SaxHandler-Klasse:
Weitere Artikel zu Lösungen für die Verwendung von Sax zum Parsen von XML in Java finden Sie auf der chinesischen PHP-Website!