Digester Including programmatically-created rules: 의 고찰

황제낙엽 2008.05.14 19:32 조회 수 : 12 추천:119

sitelink1  
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  
사용자 정의 Rule을 xmlrule로 등록하는 방법이다.

Including programmatically-created rules:

때때로 via XML을 쉽게 정의하기 힘들때가 있다. 프로그램적으로 생성된 Rule set은 digester-rules XML 파일에 포함될 수 있다.
이것은 class 속성을 가지는 < include > element를 사용하여 수행된다. class 속성에 정의하는 클래스는 org.apache.commons.digester.xmlrules.DigesterRulesSource
인터페이스를 상속받는다.
이 인터페이스는 하나의 메서드를 정의하고 있는데 getRules(Digester) 이다. 이 메서드는 rule을 생성하고 추가하는 역할을 가진다.
The pattern concatenation(패턴 연관) works exactly as if the rules had been included from an XML file. Example:

      File rules3.xml:
         < ?xml version="1.0"? >
         < !DOCTYPE digester-rules SYSTEM "digester-rules.dtd" >
         < digester-rules >
           < pattern value="root/foo" >
             < object-create-rule classname="Foo"/ >
             < include class="BarRuleCreator"/ >
           < /pattern >
         < /digester-rules >

BarRuleCreator class 정의:
          public class BarRuleCreator implements DigesterRulesSource {
              public void getRules(Digester digester) {
                  digester.addObjectCreate("bar", "Bar");
              }
          }

rules3.xml 을 파싱하는 것은 rules1.xml처럼 다음 같은 결과를 산출한다.
    root/foo -> ObjectCreateRule(Foo)
    root/foo/bar -> ObjectCreateRule(Bar)
위와 같은식으로 사용시 주의할 점은
xml파일에 정의하는 pattern에 대응하는 범위는 1레벨밖에 지원할 수 없다는 것이다.
가령 위에 정의된 파싱할 xml데이터는 "root/foo/bar" 의 깊이를 가지고 있고,
xml에 정의된 pattern에서는 "root/foo" 로써 rule 클래스에서는 "root/foo/bar" 패턴일 경우 Bar객체를 생성하도록 정의하였으나,
"bar" 이하의 깊이 만약 "root/foo/bar/sel" 이라는 패턴이 있다면, 상단의 rule 클래스에서는 "root/foo/bar/sel"패턴에 대응하는 rule을 작성할 수 없다.
만일 "root/foo/bar/sel"패턴에 대응하는 rule을 작성하려면 새로운 클래스와 xml에도 라인 몇개가 추가되어야 한다.
         < ?xml version="1.0"? >
         < !DOCTYPE digester-rules SYSTEM "digester-rules.dtd" >
         < digester-rules >
           < pattern value="root/foo" >
             < object-create-rule classname="Foo"/ >
             < include class="BarRuleCreator"/ >
             < pattern value="bar" >
               < include class="SelRuleCreator"/ >
             </pattern>
           < /pattern >
         < /digester-rules >
번호 제목 글쓴이 날짜 조회 수
37 RuleXML 작성법 황제낙엽 2009.01.20 66
36 유용한 링크 황제낙엽 2009.01.20 13
35 Digester.peek(int n) 메서드의 고찰 황제낙엽 2008.08.26 13
34 Rule클래스의 작성 및 RuleXml 파일 작성 예제 file 황제낙엽 2008.05.15 16
33 Package org.apache.commons.digester Description - V1.8 (해석중) 황제낙엽 2008.05.15 83
» Including programmatically-created rules: 의 고찰 황제낙엽 2008.05.14 12
31 Digester 의 xmlrules 를 이용하여 Properties 파일 읽어들이기 황제낙엽 2008.05.14 23
30 Parsing and Processing Large XML Documents with Digester Rules (해석중) file 황제낙엽 2008.05.13 1478
29 Package org.apache.commons.digester.xmlrules 황제낙엽 2008.05.13 26
28 Digester가 제공하는 기본 Rule을 이용한 예제 프로젝트 분석 file 황제낙엽 2008.05.13 99
27 Digester 의 소개 및 기본적인 사용법 황제낙엽 2008.05.09 58
26 Parsing, indexing, and searching XML with Digester and Lucene 황제낙엽 2008.05.07 429
25 Digester란? 황제낙엽 2008.05.07 73
24 접속 클라이언트의 아이피별로 로그 화일 기록하기 file 황제낙엽 2009.06.01 183
23 영문 메뉴얼 (PDF) file 황제낙엽 2009.05.29 19
22 사용자 정의 Appender 정의하여 Log4j 확장하기 황제낙엽 2009.05.28 220
21 POI - HSSF 예제 프로젝트 file 황제낙엽 2008.05.16 32
20 POI 셀 스타일 설정을 위한 예제 소스 file 황제낙엽 2008.05.16 1379
19 POI HSSF 기능 가이드 -- 퀵·가이드 (한글) 황제낙엽 2008.05.16 373
18 POI HSSF 기능 가이드 -- 퀵·가이드 (영문) 황제낙엽 2008.05.15 144