HOWTO · Java
XML을 Java 객체로 구문 분석
이 자습서에서는 XML을 Java 개체로 구문 분석하는 방법에 대해 설명합니다.
이 페이지의 내용
XML은 모든 소프트웨어 환경에서 데이터를 저장, 수정 및 공유하는 데 가장 널리 사용되는 기술입니다. XML 파일이 도착하면 첫 번째 작업은 파일을 분석하여 작업하는 것입니다.
이 기사에서는 Java에서 XML을 구문 분석하고 객체로 변환하는 방법에 대해 설명합니다.
XML을 Java 객체로 구문 분석
Java에서 XML 파일을 구문 분석할 때 일반적이고 가장 많이 사용되는 일부 구문 분석기를 Java에서 사용할 수 있습니다. DOM 파서, SAX 파서 및 StAX 파서가 가장 많이 사용됩니다.
우리는 이러한 각 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 파서를 사용하여 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 파서를 사용하여 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 개체로 구문 분석하고 여기에서 데이터를 추출하는 세 가지 방법에 대해 설명했습니다. 필요에 따라 이들 중 하나를 선택할 수 있습니다.