HOWTO · Java
XML を Java オブジェクトに解析
このチュートリアルでは、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つの異なる方法について説明しました。 必要に応じて、それらのいずれかを選択できます。