Translate

2014년 7월 18일 금요일

Java에서 XML 파일을 읽는 방법 - (SAX 파서)


SAX 파서가 DOM 파서와 다르게 작업이며, 그것은 어느 메모리에 어떤 XML 문서를로드하거나 XML 문서의 오브젝트 표현을 만듭니다. 대신, SAX 파서 사용 콜백 함수 ( org.xml.sax.helpers.DefaultHandler 까지)는 XML 문서 구조의 클라이언트를 알려줍니다.
SAX 파서는 신속하고 사용  DOM 파서보다 더 메모리.
다음 SAX 콜백 메서드를 참조하십시오 :
  • (startDocument) 과 endDocument () - 메서드는 XML 문서의 시작과 끝에했다.
  • startElement () 및 endElement () - 문서 요소의 시작과 끝에 불리는 방법.
  • 문자 () - XML 문서 요소의 시작과 끝 태그 사이에 텍스트 내용을 불리는 방법.

1. XML 파일

간단한 XML 파일을 만듭니다.
<?xml version="1.0"?>
<company>
 <staff>
  <firstname>yong</firstname>
  <lastname>mook kim</lastname>
  <nickname>mkyong</nickname>
  <salary>100000</salary>
 </staff>
 <staff>
  <firstname>low</firstname>
  <lastname>yin fong</lastname>
  <nickname>fong fong</nickname>
  <salary>200000</salary>
 </staff>
</company>
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();
     }
 
   }
 
}
Result
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 : mkyong
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
경고 이 예제는 것은 ​​예외가 발생할 수 있습니다 UTF-8로 XML 파일을,에 대해이 문서를 참조하십시오 SAX로 XML 'UTF-8 "파일을 읽는 방법

댓글 없음:

댓글 쓰기