XML in Java-Objekt parsen
XML ist die am weitesten verbreitete Technologie zum Speichern, Ändern und Freigeben von Daten für jede Softwareumgebung. Wenn eine XML-Datei ankommt, besteht unsere erste Aufgabe darin, sie zu parsen, um sie zu bearbeiten.
In diesem Artikel erfahren Sie, wie Sie XML in Java parsen und in ein Objekt konvertieren.
XML in Java-Objekt parsen
Wenn es um das Parsen von XML-Dateien in Java geht, sind einige gängige und am häufigsten verwendete Parser in Java verfügbar. Die bekanntesten sind DOM Parser
, SAX Parser
und StAX Parser
.
Wir werden ein Beispiel für jeden dieser XML-Parser sehen. Aber nehmen wir vor dem Start an, wir haben eine XML-Datei wie die untenstehende.
<?xml version = "1.0"?>
<class>
<person ID = "293">
<firstname>Alen</firstname>
<lastname>Walker</lastname>
<email>alen@email.com</email>
</person>
<person ID = "393">
<firstname>Stefen</firstname>
<lastname>Dev</lastname>
<email>stefen@email.com</email>
</person>
<person ID = "493">
<firstname>John</firstname>
<lastname>Doe</lastname>
<email>john@email.com</email>
</person>
</class>
Methode 1: Verwenden Sie DOM Parser
, um XML in Java-Objekte zu parsen
Beispielcode:
// importing necessary files
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.Node;
import org.w3c.dom.NodeList;
public class JavaXMLParsing {
public static void main(String[] args) {
try {
// Locating the file
File MyFile = new File("G:\\Order 011\\BATCH\\Myxml.xml");
// Creating a document object document builder.
DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance();
DocumentBuilder DB = DBF.newDocumentBuilder();
Document DOC = DB.parse(MyFile);
DOC.getDocumentElement().normalize();
// Printing the root element
System.out.println("Root element: " + DOC.getDocumentElement().getNodeName());
// Find the primary node
NodeList NodeList = DOC.getElementsByTagName("person");
// Extracting data from child node
for (int itr = 0; itr < NodeList.getLength(); itr++) {
Node MyNode = NodeList.item(itr);
System.out.println("\nNode Name:" + MyNode.getNodeName());
if (MyNode.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) MyNode;
System.out.println(
"First Name: " + element.getElementsByTagName("firstname").item(0).getTextContent());
System.out.println(
"Last Name: " + element.getElementsByTagName("lastname").item(0).getTextContent());
System.out.println(
"Email: " + element.getElementsByTagName("email").item(0).getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ausgang:
Root element: class
Node Name: person
First Name: Alen
Last Name: Walker
Email: alen@email.com
Node Name: person
First Name: Stefen
Last Name: Dev
Email: stefen@email.com
Node Name: person
First Name: John
Last Name: Doe
Email: john@email.com
Denken Sie daran, dass Sie die JAR-Datei DOM Parser
herunterladen müssen, bevor Sie damit arbeiten können. Sie können es von hier bekommen.
Methode 2: Verwenden Sie SAX Parser
, um XML in ein Java-Objekt zu parsen
Beispielcode:
// importing necessary files
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 JavaSAXParser {
public static void main(String argv[]) {
try {
// Organizing a SAXParser
SAXParserFactory MyFactory = SAXParserFactory.newInstance();
SAXParser SaxParser = MyFactory.newSAXParser();
// Creating a default handler
DefaultHandler MyHandler = new DefaultHandler() {
boolean firstname = false;
boolean lastname = false;
boolean email = false;
// Extracting data from the XML
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("firstname")) {
firstname = true;
}
if (qName.equalsIgnoreCase("lastname")) {
lastname = true;
}
if (qName.equalsIgnoreCase("email")) {
email = true;
}
}
public void characters(char ch[], int start, int length) throws SAXException {
if (firstname) {
System.out.println("First Name: " + new String(ch, start, length));
firstname = false;
}
if (lastname) {
System.out.println("Last Name: " + new String(ch, start, length));
lastname = false;
}
if (email) {
System.out.println("Email: " + new String(ch, start, length));
email = false;
}
}
};
SaxParser.parse("G:\\Order 011\\BATCH\\Myxml.xml", MyHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ausgang:
First Name: Alen
Last Name: Walker
Email: alen@email.com
First Name: Stefen
Last Name: Dev
Email: stefen@email.com
First Name: John
Last Name: Doe
Email: john@email.com
Methode 3: Verwenden Sie StAX Parser
, um XML in ein Java-Objekt zu parsen
Beispielcode:
// importing necessary files
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.*;
public class JavaSTAXparser {
private static boolean firstname, lastname, email;
public static void main(String[] args) throws FileNotFoundException, XMLStreamException {
// Locating the file
File file = new File("G:\\Order 011\\BATCH\\Myxml.xml");
// Parsing the file with the parse() method
parser(file);
}
// The parse() method
public static void parser(File file) throws FileNotFoundException, XMLStreamException {
firstname = lastname = email = false;
// Declaring a XMLInputFactory object
XMLInputFactory MyFactory = XMLInputFactory.newInstance();
// Declaring a XMLEventReader object
XMLEventReader EventReader = MyFactory.createXMLEventReader(new FileReader(file));
while (EventReader.hasNext()) {
// Creating a xml event
XMLEvent Event = EventReader.nextEvent();
if (Event.isStartElement()) {
// Extracting data from the xml file
StartElement Element = (StartElement) Event;
Iterator<Attribute> iterator = Element.getAttributes();
while (iterator.hasNext()) {
Attribute attribute = iterator.next();
QName name = attribute.getName();
String value = attribute.getValue();
System.out.println(name + " = " + value);
}
if (Element.getName().toString().equalsIgnoreCase("firstname")) {
firstname = true;
}
if (Element.getName().toString().equalsIgnoreCase("lastname")) {
lastname = true;
}
if (Element.getName().toString().equalsIgnoreCase("email")) {
email = true;
}
}
if (Event.isEndElement()) {
EndElement Element = (EndElement) Event;
if (Element.getName().toString().equalsIgnoreCase("firstname")) {
firstname = false;
}
if (Element.getName().toString().equalsIgnoreCase("lastname")) {
lastname = false;
}
if (Element.getName().toString().equalsIgnoreCase("email")) {
email = false;
}
}
if (Event.isCharacters()) {
Characters Element = (Characters) Event;
if (firstname) {
System.out.println(Element.getData());
}
if (lastname) {
System.out.println(Element.getData());
}
if (email) {
System.out.println(Element.getData());
}
}
}
}
}
Ausgang:
ID = 293
Alen
Walker
alen@email.com
ID = 393
Stefen
Dev
stefen@email.com
ID = 493
John
Doe
john@email.com
Oben haben wir drei verschiedene Methoden zum Analysieren von XML in Java-Objekte und zum Extrahieren von Daten daraus besprochen. Sie können je nach Bedarf eine davon auswählen.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn