JavaでXML文字列を解析する方法


  1. 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);
    }
}
  1. 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);
    }
}
  1. 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つの一般的な方法を説明します。それぞれの方法について、コード例も示します。

  1. 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);
    }
}
  1. 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);
    }
}
  1. 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文字列 `<element