Synchronized로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Synchronized로 검색한 결과
등록일:2008-03-10 11:04:48
작성자:
제목:javax.swing의 HTMLEditorKit를 사용한 HTML 파싱~


Java로  HTML를  파싱해야  할때가  가끔  존재한다.  이럴때  사용하면  유용한  소스를  소개한다.
해당  소스는  SWING에  포함되어  있으며,  여타  공개된  파서  이상의  기능을  제공한다.

        final  StringBuffer  plain  =  new  StringBuffer();

        HTMLEditorKit.Parser  parser;
      
        parser  =  new  ParserDelegator();
        try  {
          parser.parse(  new  StringReader(  stringData),  new  HTMLEditorKit.ParserCallback()  {
            public  void  handleText(char[]  data,  int  pos)  {
                //  Text가  존재할때  호출된다.
                plain.append(  data);
                plain.append(  '  ');
            }
          
            public  void  handleStartTag(HTML.Tag  t,  MutableAttributeSet  a,  int  pos)  {
                    //  Tag가  시작될ㅤㄸㅒㅤ  호출된다.  예)  <A  ...>
            }
          
            public  void  handleEndTag(HTML.Tag  t,  int  pos)  {
                  //  Tag가  끝날때  호출된다.  예)  </A>
            }
          
            public  void  handleSimpleTag(HTML.Tag  t,  MutableAttributeSet  a,  int  pos)  {
                  //  단일  테그  형태일때  호출된다.  <BR/>  같은  테그에서..
            }
          
            public  void  handleComment(char[]  data,  int  pos)  {  /*  NULL  */  }
            public  void  handleError(String  errorMsg,  int  pos)  {  /*  NULL  */}    
          },  true);
        }  catch  (IOException  e)  {  e.printStackTrace();  }


필자도  여러개의  파서를  사용해  봤지만  가장  마음에  드는  파서이다.

참고로,  해당  파서는  HTML  3.2  포맷을  기준으로  처리한다.  그래서  가끔  파싱  못하는  테그도  존재한다.

이럴  경우...

less..
  public  static  class  ParserHTML  extends  ParserDelegator  {
    /**
      *
      */
    private  static  final  long  serialVersionUID  =  -4814411384900651146L;
    private  static  DTD  dtd  =  null;

    public  ParserHTML(  )  {  setDefaultDTD();  }
  
    protected  static  Synchronized  void  setDefaultDTD()  {
      if  (dtd  ==  null)  {
        DTD  _dtd  =  null;
        String  nm  =  "html32";
      
        try  {
          _dtd  =  DTD.getDTD(nm);
        }  catch  (IOException  e)  {
          System.out.println("Throw  an  exception:  could  not  get  default  dtd:  "  +  nm);
        }
      
        dtd  =  createDTD(  _dtd,  nm);
      }
    }
  
    public  void  parse(  Reader  r,
        HTMLEditorKit.ParserCallback  cb,  boolean  ignoreCharSet)  throws  IOException  {
      new  DocumentParser(dtd).parse(r,  cb,  ignoreCharSet);
    }
  };

를  만들어,  DTD(bdtd  확장자)를  업데이트  하여  사용할수  있다.  그러면  원하는  결과를  얻을수  있다.
그런데,  문제는  해당  DTD를  구하기가  쉽지  않다는  것이다.

아래  html401.bdtd  파일을  첨부한다.  이  파일을  사용하기  위해서는  classpath가    
          javax/swing/text/html/parser/dtds
에  저장되어  있어야  DTD.getDTD()를  통해  얻을수  있다.

html401.bdtd
그러나,  HTML  4.01를  사용할경우,  HTML  3.2  사용시  문제가  되지  않았던  부분에  문제가  발생되는
경우가  있다.      첨부한  html401.bdtd는  Sun에서  배포한  버젼이  아니라,  인터넷을  돌아  다니다  우연히
발견한  것으로  기본으로  포함된  html32.bdtd에  비해  좋은  분석  결과를  얻어  내지는  못하였다.
(기본  Java패키지에는  포함  안되어  있음)


참고하시길~

출처  :  http://symlink.tistory.com/19