XML を Java オブジェクトに解析
XML は、あらゆるソフトウェア環境でデータを保存、変更、および共有するために最も広く使用されているテクノロジーです。 XML ファイルが到着すると、最初の仕事はそれを解析して処理することです。
この記事では、Java で XML を解析してオブジェクトに変換する方法について説明します。
XML を Java オブジェクトに解析
Java で XML ファイルを解析する場合、一般的で最もよく使用されるパーサーが Java で利用できます。 DOM Parser
、SAX Parser
、StAX Parser
が最も人気があります。
これらの各 XML パーサーの例を見ていきます。 しかし、始める前に、以下のような XML ファイルがあるとします。
<?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>
方法 1: DOM Parser
を使用して XML を Java オブジェクトに解析する
コード例:
// 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();
}
}
}
出力:
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
作業する前に、DOM Parser
jar ファイルをダウンロードする必要があることを忘れないでください。 こちらから入手できます。
方法 2: SAX Parser
を使用して XML を Java オブジェクトに解析する
コード例:
// 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();
}
}
}
出力:
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
方法 3: StAX Parser
を使用して XML を Java オブジェクトに解析する
コード例:
// 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());
}
}
}
}
}
出力:
ID = 293
Alen
Walker
alen@email.com
ID = 393
Stefen
Dev
stefen@email.com
ID = 493
John
Doe
john@email.com
上記では、XML を Java オブジェクトに解析し、そこからデータを抽出する 3つの異なる方法について説明しました。 必要に応じて、それらのいずれかを選択できます。
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