- DOMを使用した解析: DOM (Document Object Model) を使用すると、XMLをツリー構造として解析できます。以下は、DOMを使用してXML文字列を解析する例です。
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
public class XmlParserUsingDOM {
public static void main(String[] args) throws Exception {
String xmlString = "<root><element>Value</element></root>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = factory.newDocumentBuilder().parse(new InputSource(new StringReader(xmlString)));
// XMLの解析処理をここに記述
// 例: ルート要素の値を取得する
String rootValue = document.getDocumentElement().getTextContent();
System.out.println("Root value: " + rootValue);
}
}
- SAXを使用した解析: SAX (Simple API for XML) を使用すると、XMLをイベントベースで解析できます。以下は、SAXを使用してXML文字列を解析する例です。
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.StringReader;
public class XmlParserUsingSAX {
public static void main(String[] args) throws Exception {
String xmlString = "<root><element>Value</element></root>";
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean elementValue = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("element")) {
elementValue = true;
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if (elementValue) {
System.out.println("Element value: " + new String(ch, start, length));
elementValue = false;
}
}
};
saxParser.parse(new InputSource(new StringReader(xmlString)), handler);
}
}
- JAXBを使用した解析: JAXB (Java Architecture for XML Binding) を使用すると、XMLをJavaオブジェクトにバインディングできます。以下は、JAXBを使用してXML文字列を解析する例です。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public class XmlParserUsingJAXB {
public static void main(String[] args) throws JAXBException {
String xmlString = "<root><element>Value</element></root>";
JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Root root = (Root) unmarshaller.unmarshal(new StringReader(xmlString));
// XMLの解析処理をここに記述
// 例: ルート要素の値を取得する
String rootValue = root.getElement();
System.out.println("Root value: " + rootValue);
}
}
class Root {
private String element;
public String getElement() {
return element;
}
public void setElement(String element) {
this.element = element;
}
}
上記のコード例では、XML文字列 <root><element>Value</element></root>
を解析して、要素の値を取得しています。実際の解析処理は、各方法に応じて追加する必要があります。
このように、JavaでXML文字列を解析するためには、DOM、SAX、JAXBのいずれかの方法を選択することができます。どの方法が最適かは、解析するXMLのサイズや要件によって異なります。DOMは小規模なXMLに適しており、全体のツリー構造をメモリに展開します。SAXは大規模なXMLに適しており、イベントベースで逐次的に処理します。JAXBはXMLとJavaオブジェクトの間でマッピングを提供し、オブジェクト指向のアプローチを使用します。
JavaでXML文字列を解析する方法にはいくつかのアプローチがあります。以下では、DOM、SAX、およびJAXBという3つの一般的な方法を説明します。それぞれの方法について、コード例も示します。
- DOMを使用した解析: DOM (Document Object Model) を使用すると、XMLをツリー構造として解析できます。以下は、DOMを使用してXML文字列を解析する例です。
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
public class XmlParserUsingDOM {
public static void main(String[] args) throws Exception {
String xmlString = "<root><element>Value</element></root>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = factory.newDocumentBuilder().parse(new InputSource(new StringReader(xmlString)));
// XMLの解析処理をここに記述
// 例: ルート要素の値を取得する
String rootValue = document.getDocumentElement().getTextContent();
System.out.println("Root value: " + rootValue);
}
}
- SAXを使用した解析: SAX (Simple API for XML) を使用すると、XMLをイベントベースで解析できます。以下は、SAXを使用してXML文字列を解析する例です。
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.StringReader;
public class XmlParserUsingSAX {
public static void main(String[] args) throws Exception {
String xmlString = "<root><element>Value</element></root>";
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean elementValue = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("element")) {
elementValue = true;
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if (elementValue) {
System.out.println("Element value: " + new String(ch, start, length));
elementValue = false;
}
}
};
saxParser.parse(new InputSource(new StringReader(xmlString)), handler);
}
}
- JAXBを使用した解析: JAXB (Java Architecture for XML Binding) を使用すると、XMLをJavaオブジェクトにバインディングできます。以下は、JAXBを使用してXML文字列を解析する例です。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public class XmlParserUsingJAXB {
public static void main(String[] args) throws JAXBException {
String xmlString = "<root><element>Value</element></root>";
JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Root root = (Root) unmarshaller.unmarshal(new StringReader(xmlString));
// XMLの解析処理をここに記述
// 例: ルート要素の値を取得する
String rootValue = root.getElement();
System.out.println("Root value: " + rootValue);
}
}
class Root {
private String element;
public String getElement() {
return element;
}
public void setElement(String element) {
this.element = element;
}
}
上記のコード例では、XML文字列 `