JavaでXMLファイルを読む方法 - (SAX Parser)

JavaでXMLファイルを読み取る方法-(SAXパーサー)

SAX parserはDOMパーサーとは異なる動作をし、XMLドキュメントをメモリにロードしたり、XMLドキュメントのオブジェクト表現を作成したりしません。 代わりに、SAXパーサーはコールバック関数(org.xml.sax.helpers.DefaultHandler)を使用して、クライアントにXMLドキュメント構造を通知します。

SAX Parser is faster and uses less memory than DOM parser.

次のSAXコールバックメソッドを参照してください。

  • startDocument()およびendDocument() –XMLドキュメントの最初と最後に呼び出されるメソッド。

  • startElement()およびendElement() –ドキュメント要素の最初と最後で呼び出されるメソッド。

  • characters() –XMLドキュメント要素の開始タグと終了タグの間にテキストコンテンツを入れて呼び出されるメソッド。

1. XMLファイル

単純なXMLファイルを作成します。


    
        yong
        mook kim
        example
        100000
    
    
        low
        yin fong
        fong fong
        200000
    

2. Javaファイル

SAXパーサーを使用して、XMLファイルを解析します。

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 ReadXMLFile {

   public static void main(String argv[]) {

    try {

    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser saxParser = factory.newSAXParser();

    DefaultHandler handler = new DefaultHandler() {

    boolean bfname = false;
    boolean blname = false;
    boolean bnname = false;
    boolean bsalary = false;

    public void startElement(String uri, String localName,String qName,
                Attributes attributes) throws SAXException {

        System.out.println("Start Element :" + qName);

        if (qName.equalsIgnoreCase("FIRSTNAME")) {
            bfname = true;
        }

        if (qName.equalsIgnoreCase("LASTNAME")) {
            blname = true;
        }

        if (qName.equalsIgnoreCase("NICKNAME")) {
            bnname = true;
        }

        if (qName.equalsIgnoreCase("SALARY")) {
            bsalary = true;
        }

    }

    public void endElement(String uri, String localName,
        String qName) throws SAXException {

        System.out.println("End Element :" + qName);

    }

    public void characters(char ch[], int start, int length) throws SAXException {

        if (bfname) {
            System.out.println("First Name : " + new String(ch, start, length));
            bfname = false;
        }

        if (blname) {
            System.out.println("Last Name : " + new String(ch, start, length));
            blname = false;
        }

        if (bnname) {
            System.out.println("Nick Name : " + new String(ch, start, length));
            bnname = false;
        }

        if (bsalary) {
            System.out.println("Salary : " + new String(ch, start, length));
            bsalary = false;
        }

    }

     };

       saxParser.parse("c:\\file.xml", handler);

     } catch (Exception e) {
       e.printStackTrace();
     }

   }

}

結果

Start Element :company
Start Element :staff
Start Element :firstname
First Name : yong
End Element :firstname
Start Element :lastname
Last Name : mook kim
End Element :lastname
Start Element :nickname
Nick Name : example
End Element :nickname
Start Element :salary
Salary : 100000
End Element :salary
End Element :staff
Start Element :staff
Start Element :firstname
First Name : low
End Element :firstname
Start Element :lastname
Last Name : yin fong
End Element :lastname
Start Element :nickname
Nick Name : fong fong
End Element :nickname
Start Element :salary
Salary : 200000
End Element :salary
End Element :staff
End Element :company

Warning
この例では、UTF-8 XMLファイルの例外が発生する可能性があります。how to read the XML “UTF-8” file in SAXに関するこの記事をお読みください

Note
このHow to read XML file in Java – (DOM Parser)を読むことに興味があるかもしれません