DOM ist ein leistungsstarkes Parsing-Tool, das für kleine Dokumente geeignet ist
Warum sagst du das? Weil das gesamte XML-Dokument in den Speicher geladen wird, um einen Dokumentobjektbaum zu bilden
Alles in allem klingt es beängstigend, aber es ist im Vergleich zu Sax recht praktisch, um kleine Dinge zu lesen.
Was die Hinzufügungs- und Löschvorgänge usw. betrifft, habe ich nicht vor, sie zu schreiben. Als ich mir das Tutorial ansah, musste ich mich wegen des hässlichen Codes fast übergeben.
Genau aus diesem Grund existierten später Tools wie jdom und dom4j ...
Es gibt nicht viel zu sagen, gehen Sie einfach zum Code
Beispiel für Dom-Parsing
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
Demo der öffentlichen Klasse {
public static void main(String[] args) löst eine Ausnahme aus {
//Erstellen Sie eine Parser-Factory-Instanz und generieren Sie einen Parser
DocumentBuilderFactory Factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = Factory.newDocumentBuilder();
//Erstellen Sie das Dokumentobjekt, das analysiert werden muss
Datei f = neue Datei("books.xml");
//Parsen Sie das Dokument und geben Sie ein Document-Objekt zurück. Zu diesem Zeitpunkt wurde das XML-Dokument in den Speicher geladen.
//Okay, machen wir das Parsen intensiver und der Rest besteht darin, die Daten abzurufen.
Dokument doc = builder.parse(f);
//Holen Sie sich das Dokumentstammelement
//Sie fragen mich, warum ich das mache? Weil das Dokumentobjekt selbst eine Baumstruktur ist und dies die Wurzel des Baums ist.
//Natürlich können Sie die Elementsammlung auch direkt finden und diesen Schritt weglassen
Element root = doc.getDocumentElement();
//Der Wurzelknoten wurde oben gefunden, und hier beginnen wir damit, die Sammlung von Elementen unter dem Wurzelknoten abzurufen.
NodeList list = root.getElementsByTagName("book");
for (int i = 0; i < list.getLength(); i++) {
//Suchen Sie den Knoten in der Sammlung über die Methode item() und konvertieren Sie ihn in ein Elementobjekt
Element n = (Element) list.item(i);
// Holen Sie sich die Attributzuordnung im Objekt und verwenden Sie eine for-Schleife zum Extrahieren und Drucken
NamedNodeMap node = n.getAttributes();
for (int x = 0; x < node.getLength(); x++) {
Knoten nn = node.item(x);
System.out.println(nn.getNodeName() + ": " + nn.getNodeValue());
}
// Elementinhalt drucken, der Code ist sehr kompliziert, fast ein festes Format
System.out.println("title: " +n.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
System.out.println("author: " + n.getElementsByTagName("author").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
Ausgabeergebnis: