XML(eXtensible Markup Language)は、データを構造化して保存するためのマークアップ言語で、主に情報の交換や保存を目的としています。XMLは、HTMLと似た構文を持ちながらも、データを表現するためにタグを自由に定義できる特徴があります。これにより、異なるシステム間でデータを一貫した形式でやり取りするための強力なツールとなります。
XMLは以下のような特徴を持っています:

- タグの柔軟性:XMLではタグを自由に定義できるため、データの構造に応じたタグを作成し、データを表現できます。
- 人間にも機械にも理解しやすい:XMLファイルはテキスト形式であるため、人間にも読める形式でデータが保存されます。加えて、機械によって解析しやすい構造を持っています。
- 階層構造:XMLは階層的にデータを構造化できるため、複雑なデータも適切に整理することができます。
JavaにおけるXMLの使用
Javaでは、XMLを扱うための標準APIが提供されており、これによりXMLデータの読み込み、解析、生成が簡単に行えます。JavaでXMLを扱うためには主に以下のクラスやライブラリを使用します。
1. DOM(Document Object Model)
DOMは、XML文書をメモリ内でツリー状に表現する方法です。XMLファイルを読み込んでメモリ内にツリー構造としてロードし、操作することができます。DOMは、文書全体をメモリに読み込むため、大きなXMLファイルの場合はパフォーマンスが低下する可能性がありますが、複雑な操作には向いています。
例:
javaimport javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
public class XMLExample {
public static void main(String[] args) {
try {
File xmlFile = new File("example.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlFile);
NodeList nodeList = document.getElementsByTagName("name");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
System.out.println(element.getTextContent());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. SAX(Simple API for XML)
SAXは、XML文書を順次読み込むストリーム方式のAPIです。メモリに文書全体をロードすることなく、必要な部分だけを順番に読み取るため、DOMよりもメモリ効率が良いです。特に、大きなXMLファイルを扱う際に便利です。
例:
javaimport org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.*;
public class SAXExample {
public static void main(String[] args) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse("example.xml", new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if (qName.equalsIgnoreCase("name")) {
System.out.println("Name found!");
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. JAXB(Java Architecture for XML Binding)
JAXBは、XMLとJavaオブジェクトを相互に変換するためのライブラリです。XMLデータをJavaオブジェクトに変換したり、逆にJavaオブジェクトをXMLに変換することができます。これにより、Javaで扱うデータとXML間の相互変換が容易に行えます。
例:
javaimport javax.xml.bind.*;
import java.io.*;
public class JAXBExample {
public static void main(String[] args) {
try {
// Create a Java object
Person person = new Person("John", "Doe");
// Marshal the Java object to XML
JAXBContext context = JAXBContext.newInstance(Person.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(person, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
@XmlRootElement
class Person {
private String firstName;
private String lastName;
public Person() { }
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@XmlElement
public String getFirstName() { return firstName; }
@XmlElement
public String getLastName() { return lastName; }
}
結論
XMLはデータ交換のために非常に有用なフォーマットであり、Javaでの利用方法も多岐にわたります。DOM、SAX、JAXBといったさまざまなAPIを使い分けることで、異なる用途に最適な方法でXMLデータを操作することができます。これにより、システム間での効率的なデータ交換が実現でき、特に分散システムやWebサービスでは欠かせない技術となっています。