본문 바로가기

IT 이야기/데이터베이스

XML Parser

xml.zip Data조사, Data parser, DBMS로 data전송

 

※Xerces 설치 방법

  1. http://xerces.apache.org/접속해서 좌측의 downloads 클릭
  2. 다운로드 받는게 source, binary, tools 이렇게 세가지 있는데 그 중에 binary distributions의 Xerces2 Java 2.10.0 - zip 파일만 받으면 됨!!
  3. /local/에(보통 c:\)압축해제(xerces-2_10_0 폴더가 생김)후 xercesImpl.jar 파일이랑 xml-apis.jar파일이랑 xercesSamples.jar파일(요건 꼭필요한지는 모르겠지만)을 복사해서

    ※혹시 모르니까 5정도의 jar파일을 다 붙여버리자.

  4. C:\Program Files\Java\jre6\lib\ext\(이게CLASSPATH)에다가 붙여주면 됨

 

이렇게 해주면 ext 폴더가 우선순위가 높기 때문에 JDK 안에 내장되어 있는 파서보다 xerces를 먼저 인식하게 됨

 

 

* xerces 설치 확인 방법->http://sulemi.egloos.com/1134010

XML 문서: student.xml

 
<?xml version="1.0" encoding="EUC-KR"?>
<!-- XML 문서 작성 Lab 입니다. -->
<학원>
<초등학생 번호="0001">
<이름 성별="남">박 현규</이름>
<나이>11</나이>
<학교명>오륜초등학교</학교명>
<특기>바이올린</특기>
</초등학생>
<초등학생 번호="0002">
<이름 성별="여">박 지수</이름>
<나이>11</나이>
<학교명>신동초등학교</학교명>
<특기>피아노</특기>
</초등학생>

</학원>

 

-메모장에 이거 복사해서 student.xml로 저장해서 project 폴더에 넣어주면 됨

 

JAVA 문서 : FirstDOM.java

 
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class FirstDOM{
public static void main(String args[]) throws Exception{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = dbf.newDocumentBuilder();
Document xmldoc = parser.parse("student.xml");
Element root = xmldoc.getDocumentElement();
System.out.println(root);
 
//실제 객체 확인
System.out.println(root.getClass().getName());
System.out.println(dbf.getClass().getName());
System.out.println(parser.getClass().getName());
}
}

 

실행결과가 다음과 같으면 xerces 설치에 성공한 것.

[학원: null]
org.apache.xerces.dom.DeferredElementImpl
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
org.apache.xerces.jaxp.DocumentBuilderImpl

 

 

http://www.hschoimd.kr/zbxe/3549 xml공부방

 

http://blog.bagesoft.com/727 XML parser 관련 blog

-이 블로그에서 알아야 될 내용

 SAX의 사용법

SAX API는 몇 개의 이벤트의 정의한다. 개발자는 자바를 이용해서 원하는 모든 이벤트를 다룰 수 있다. 만약 어떤 타입의 이벤트를 다루기 싫다면 그것을 위해 별도의 코딩을 할 필요가 없다. 그저 발생되는 이벤트를 무시하면 파서는 그것을 취급하지 않기때문이다.

이제 SAX에서 사용되는 이벤트를 보도록 하겠다. 이 이벤트들은 org.xml.sax 패키지 안에 있는 HandlerBase 클래스의 한 부분이다.

- startDocument

: 문서의 시작을 알림

- endDocument

: 문서의 끝을 알림.

-        startElement

: 엘리먼트의 시작을 알림, 파서는 이 이벤트를 시작태그를 만날 때 마다 발생시킨다.

-        endElement

: 엘리먼트의 끝을 알린다.

-      characters

: DOM text 노드와 유사하게 character 데이터를 가진것

-        ignorableWhitespace

: 공백을 무시하고자 할때 사용된다. 모든 공백노드는 무시된다.

-        warning, error, fatalError

: 이 세가지 이벤트들은 파싱 에러를 말한다.

-    setDocumentLocator

: SAX locator 객체의 저장을 허락하는 이벤트이다.

SAX API는 사실상 네 가지 이벤트 핸들링 인터페이스로 구분이 된다. EntityHandler, DTDHandler, DocumentHandler, ErrorHandler 로 정의가 되는데, 이 모든 인터페이스는 HandlerBase에 의해 정의된다. 대부분의 Java codeHandlerBase 클래스를 확장한다.

SAX 이벤트를 다루기위해 SAX 메소드를 사용해야한다. 다음이 가장 일반적으로 많이 사용되는 SAX 메소드이다. 위에서 살펴본 이벤트와 일치한다.

- startDocument(), endDocument()

- startElement(String name, AttributeList attrs)

- endElement(String name)

- characters(char ch[], int start, int length)

SAX Parser의 사용도 DOM parser의 사용법과 유사하다.

  1. Parser 객체를 생성한다.

SAXParser parser = new SAXParser(); //파서를 생성

parser.setDocumentHandler(this);

parser.setErrorHandler(this);

try{

parser.parse(uri);

}

구조는 DOM 예제와 같은데 여기서는 우선 Parser 객체의 생성을 DOMParser 대신 SAXParser를 사용한다. 여기서 주지할만한 것은 XML 문서를 파싱하는데 setDocumenthandlersetErrorHandler 메소드를 사용한다는 것이다.

  1. XML 문서를 파싱한다.

SAXParser parser = new SAXParser();

parser.setDocumentHandler(this);

parser.setErrorHandler(this);

try{

parser.parse(uri); //URI에 있는 xml문서를 파싱한다.

}

SAX Parser 객체가 생성이 됐으면 문서를 파싱한다. Try 블록으로 처리한것은 에러가 발생할 경우 그것을 잡아내기 위함이다.

 

  1. SAX 이벤트를 처리한다.

Public void startDocument()

public void startElement(String name, AttributeList attrs)

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

public void ignorableWhitespace(char ch[], int start, int length)

….

XML 문서에서 생성되는 SAX 이벤트 처리하는 SAX 이벤트 핸들러를 SAXParser 객체가 호출하면서 파싱은 진행된다. Document의 시작을 체크하고, 각 엘리먼트를 이름과 속성에 따라 구분한다. Characters로 글자의 컨텐트, 시작, 길이를 체크한다. 공백은 무시할 수 있다.

DOM은 문서의 모든 정보를 표현하기위해 java 객체로 만들고 그 DOM 트리를 저장하려면 제법 많은 양의 메모리가 사용된다. 그러나 파서로 생성된 대부분의 객체들은 한번도 사용되지 못하고 쓰이지 않는다. 이렇기 때문에 SAX로 필요한 이벤트만 찾아서 그것에 따른 이벤트 핸들링을 해주면 훨씬 효율적인 것이다.

 

 

 

http://www.bearcave.com/software/java/xml/sax_parsing.html SAX for java관련

 

 

어떻게 처리할지 ? 

<author>한욱신</authou>
<author>김승호</author>
<title>데이터베이스</title>
<year>1999년 </year>

 

우리가 생각한 해결방법.

한욱신 데이터베이스 1999년
김승호 데이터베이스 1999년

 

작년 팀 해결방법.

한욱신;김승호 데이터베이스 1999년

//이와같은 형태로 처리했다.

//Oracle SQL 에서 한욱신;김승호를 한욱신과 김승호로 구분할 수 있는 방법을 사용하였다.

 

  1. 독어 처리는 파싱 했을때 ? 가 나오는 현상 . 어떻게 처리?
  2. Element ( Article , Book , Inproceeding , Proceeding , Incorrection )

    각각에 대한 Format 정하기.

 

독어처리방법.JPG

 

이 글은 스프링노트에서 작성되었습니다.

'IT 이야기 > 데이터베이스' 카테고리의 다른 글

dblp.xml  (0) 2011.01.12
DBLP - parsing  (0) 2011.01.12
Project 소개  (0) 2011.01.12
Oracle Text  (0) 2011.01.12
Oracle loader  (0) 2011.01.12