SAX 파서 : Java에서 XML 파일을 읽는 방법
Sax 파서 Sax는 최신 DOM의 가장 인기 있는 파서이며, DOM과 달리 Sax는 다르게 작동하고, XML을 처리하기 전에 메모리에 로드하지 않으며, 어떤 유형의 XML 객체도 생성하지 않습니다. SAX는 메모리를 덜 사용하기 때문에 큰 xml 파일을 구문 분석하는 데 적합합니다.SAX 구문 분석기는 세 가지 방법을 사용하여 xml을 구문 분석하고 읽습니다.
startElement(): SAX 구문 분석기가 여는 태그 '<'를 만날 때마다, startElement().
endElement(): at SAX 파서가 닫는 태그 '>'를 만날 때마다 startElement().
characters(): 이 메서드는 SAX 구문 분석기가 여는 태그와 닫는 태그 사이의 텍스트를 찾을 때 호출됩니다
이 세 가지 메서드는 xml을 구문 분석하는 역할을 하며, 프로그래머는 이를 사용하여 코드에서 정보를 구문 분석, 읽기 또는 추출합니다.
java
Java 코드를 테스트하려면, 콘솔에 내용을 표시하는 데 사용할 간단한 XML 파일을 만들어야합니다 .xml 버전 = "1.0"인코딩 = "UTF-8"?>java:
< 연락처 >
< 개인 ID="1"입니다>
< 이름> 인코더
< 이름> 자바
< 모바일> 054124587
< 이메일> codeurjava@gmail.com
인>
< 개인 ID="2"입니다>
< 이름> 인코더
< 이름> C++
< 모바일> 062148795
< 이메일> codeurcplusplus@gmail.com
인>
연락처>
import javax.xml.parsers.SAXParser;Execution:
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ReadFileXML{
public static void main(String argv[]) {
try {
//sax parser
SAXParserFactory spfactory = SAXParserFactory.newInstance();
//파서의 인스턴스 가져오기
SAXParser saxParser = spfactory.newSAXParser();
/*세 가지 메서드 모두 DefaltHandler에서 선언됩니다. /> corp
DefaultHandler 핸들러 = new DefaultHandler() {
부울 bnom = false;
부울 bprefirst name = false;
부울 bmobile = false;
부울 bemail = false;
/*이 메서드는 파서가
여는 태그 '<'를 만날 때마다 호출됩니다. */
public void startElement(String uri, String localName,
String qName,Attributes attributes) throws SAXException{
if (qName.equalsIgnoreCase("name")) {
bnom = true;
}
if (qName.equalsIgnoreCase("이름")) {
bfirstname = true;
}
if (qName.equalsIgnoreCase("모바일")) {
bmobile = true;
}
if (qName.equalsIgnoreCase("이메일")) {
bemail = true;
}
}
/*이 메서드는 파서가 닫는 태그 '>'를 만날 때마다 호출됩니다
닫는 태그 '' */
public void endElement(String uri, String localName,
String qName) throws SAXException {
if (qName.equalsIgnoreCase("name")) {
bnom = false;
}
if (qName.equalsIgnoreCase("이름")) {
bfirstname = false;
}
if (qName.equalsIgnoreCase("모바일")) {
bmobile = false;
}
if (qName.equalsIgnoreCase("이메일")) {
bemail = false;
}
}
/*'<'와 '>' 사이에 저장된 데이터를 출력합니다. */
public void characters(char ch[], int start,
int length)는 SAXException {
if (bnom) {
System.out.println("이름: " +
new String(ch, 시작, 길이));
bnom = 거짓;
}
if (bprename) {
System.out.println("이름: " +
new String(ch, start, length));
b첫 번째 이름 = false;
}
if (bmobile) {
System.out.println("모바일 : " +
new String(ch, start, length));
bmobile = 거짓;
}
if (bemail) {
System.out.println("Email : " +
new String(ch, start, length));
bemail = 거짓;
}
}
};
saxParser.parse("exemple.xml", 핸들러);
} catch (예외 e) {
e.printStackTrace();
}
}
}
성: coder
이름: java
모바일: 054124587
Email: codeurjava@gmail.com
성: coder
이름: c++
모바일: 062148795
이메일: codeurcplusplus@gmail.com