자바 학습:SAX 로 XML 해석 하기

4938 단어 자바xmlsax
본 고 는 제 가 제9 판 권 II(고급 특성)를 배 울 때 쓴 코드 입 니 다.원서 의 저 자 는(미)Cay S.Horstmann,Gary Cornell 이 고 번역 자 는 진호 붕,왕 호,야 오 젠 평등 이다.제 자바 버 전 은 1.8 입 니 다.
자바 에 서 는 트 리 해석 기 DOM(Document Object Model,문서 대상 모델)과 스 트림 해석 기 SAX(Simple API for XML,XML 단순 API)두 가지 XML 해석 기 를 제공 합 니 다.문서 가 크 고 처리 알고리즘 이 간단 하 다 면 전체 트 리 구 조 를 보지 않 고 실행 할 때 노드 를 분석 할 수 있 을 때 DOM 처리 방식 의 효율 은 SAX 보다 못 합 니 다.
XML 문서 의 내용 은 다음 과 같 습 니 다.
파일 이름:NameList.xml,파일 경로:C:\\Users\Tsybius\\Desktop\\NameList.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <list1>
    <person id="101" name="Tsybius" remark="1" />
    <person id="102" name="Galatea" remark="2" />
    <person id="103" name="Quintus" remark="3" />
    <person id="104" name="Atia" remark="4" />
    <person id="105" name="Justitia" remark="5" />
  </list1>
  <list2>
    <person id="201" name="Zhang" remark="a" />
    <person id="202" name="Wang" remark="b" />
    <person id="203" name="Li" remark="c" />
    <person id="204" name="Zhao" remark="d" />
    <person id="205" name="Liu" remark="e" />
  </list2>
  <text>TEXT</text>
</root>

자바 코드 는 다음 과 같 습 니 다:
package XmlSaxTest;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
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;


/**
 *   SAX  XML
 * @author Tsybius2014
 * @date 2015 12 3 
 * @time   9:46:40
 * @remark
 *
 */
class XmlSaxTest {

    /**
     *   SAX  XML
     * @param args
     */
    public static void main(String[] args) {
        
        String filePath = "C:\\Users\\Tsybius\\Desktop\\NameList.xml";
        File f = new File(filePath);

        //    
        DefaultHandler handler = new DefaultHandler() {
            //XML         
            public void startDocument() {
                System.out.println("---------XML      ---------");
            }
            //XML         
            public void endDocument() {
                System.out.println("---------XML      ---------");
            }
            //          
            public void startElement(String namespaceURI, 
                String lname, String qname, Attributes attrs) {
                System.out.println("    :" + qname);
                if (qname.equals("person")) {
                    System.out.println("id:" + attrs.getValue("id"));
                    System.out.println("name:" + attrs.getValue("name"));
                    System.out.println("remark:" + attrs.getValue("remark"));
                }
            }
            //         
            public void endElement(String url, String lname, String qname) {
                System.out.println("    :" + qname);
            }
            //        
            public void characters(char[] ch, int start, int length) {
                String s = new String(ch, start, length);
                if (!s.isEmpty() && s.trim().length() > 0) {
                    System.out.println(" :" + s);
                }
            }
        };
        
        //  SAX  XML
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(false);
        try {
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse(f, handler);
        } catch (ParserConfigurationException | SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("END");
    }
}

콘 솔 에서 출력 결 과 는 다음 과 같 습 니 다.
---------XML      ---------
    :root
    :list1
    :person
id:101
name:Tsybius
remark:1
    :person
    :person
id:102
name:Galatea
remark:2
    :person
    :person
id:103
name:Quintus
remark:3
    :person
    :person
id:104
name:Atia
remark:4
    :person
    :person
id:105
name:Justitia
remark:5
    :person
    :list1
    :list2
    :person
id:201
name:Zhang
remark:a
    :person
    :person
id:202
name:Wang
remark:b
    :person
    :person
id:203
name:Li
remark:c
    :person
    :person
id:204
name:Zhao
remark:d
    :person
    :person
id:205
name:Liu
remark:e
    :person
    :list2
    :text
 :TEXT
    :text
    :root
---------XML      ---------
END

END

좋은 웹페이지 즐겨찾기