沉睡森林@漂在北京

          本處文章除注明“轉(zhuǎn)載”外均為原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            152 隨筆 :: 4 文章 :: 114 評(píng)論 :: 0 Trackbacks

          利用Digester對(duì)XML文件進(jìn)行解析

           

          以前解析XML文件主要是使用JDOM,最近研究StrutsiBatis的代碼,發(fā)現(xiàn)他們都是使用了Digester這種快速將XML轉(zhuǎn)化為ObjectXML處理組件。于是,我便花了一點(diǎn)時(shí)間找了一個(gè)DigesterDemo。下面是代碼:

          package com.example.demo.domain;

          public class Article {

              private String headline;

              private String page;

              public Article() {

              }

              public void setHeadline(String rhs) {

                 headline = rhs;

              }

              public void setPage(String rhs) {

                 page = rhs;

              }

              public String toString() {

                 return "Article: Headline='" + headline + "' on page='" + page + "' ";

              }

          }

           

          package com.example.demo.domain;

           

          public class Book {

              private String author;

           

              private String title;

           

              public Book() {

              }

           

              public void setAuthor(String rhs) {

                 author = rhs;

              }

           

              public void setTitle(String rhs) {

                 title = rhs;

              }

           

              public String toString() {

           

                 return "Book: Author='" + author + "' Title='" + title + "'";

           

              }

          }

           

          package com.example.demo.domain;

           

          import java.util.Vector;

           

          public class Catalog {

              private Vector books;

           

              private Vector magazines;

           

              public Catalog() {

                 books = new Vector();

                 magazines = new Vector();

              }

           

              public void addBook(Book rhs) {

                 books.addElement(rhs);

              }

           

              public void addMagazine(Magazine rhs) {

                 magazines.addElement(rhs);

              }

           

              public String toString() {

           

                 String newline = System.getProperty("line.separator");

           

                 StringBuffer buf = new StringBuffer();

           

                 buf.append("--- Books ---").append(newline);

           

                 for (int i = 0; i < books.size(); i++) {

           

                     buf.append(books.elementAt(i)).append(newline);

           

                 }

           

                 buf.append("--- Magazines ---").append(newline);

           

                 for (int i = 0; i < magazines.size(); i++) {

           

                     buf.append(magazines.elementAt(i)).append(newline);

           

                 }

           

                 return buf.toString();

           

              }

          }

           

          package com.example.demo.domain;

           

          import java.util.Vector;

           

          public class Magazine {

              private String name;

           

              private Vector articles;

           

              public Magazine() {

           

                 articles = new Vector();

           

              }

           

              public void setName(String rhs) {

                 name = rhs;

              }

           

              public void addArticle(Article a) {

           

                 articles.addElement(a);

           

              }

           

              public String toString() {

           

                 StringBuffer buf = new StringBuffer("Magazine: Name='" + name + "' ");

           

                 for (int i = 0; i < articles.size(); i++) {

           

                     buf.append(articles.elementAt(i).toString());

           

                 }

           

                 return buf.toString();

           

              }

          }

           

          上面是4個(gè)domain對(duì)象。下面是處理解析對(duì)象。

          package com.example.demo.digester;

           

          import java.io.File;

           

          import org.apache.commons.digester.Digester;

           

          import com.example.demo.domain.Article;

          import com.example.demo.domain.Book;

          import com.example.demo.domain.Catalog;

          import com.example.demo.domain.Magazine;

           

          public class DigesterDriver {

              public static void main(String[] args) {

           

                 try {

           

                     Digester digester = new Digester();

                     digester.setValidating(false);

                     digester.addObjectCreate("catalog", Catalog.class);

                     digester.addObjectCreate("catalog/book", Book.class);

                     digester.addBeanPropertySetter("catalog/book/author", "author");

                     digester.addBeanPropertySetter("catalog/book/title", "title");

                    

                     digester.addSetNext("catalog/book", "addBook");

                     digester.addObjectCreate("catalog/magazine", Magazine.class);

                     digester.addBeanPropertySetter("catalog/magazine/name", "name");

                     digester.addObjectCreate("catalog/magazine/article", Article.class);

                     digester.addSetProperties("catalog/magazine/article", "page", "page");

                     digester.addBeanPropertySetter("catalog/magazine/article/headline");

                     digester.addSetNext("catalog/magazine/article", "addArticle");

                     digester.addSetNext("catalog/magazine", "addMagazine");

                    

                    

                     File input = new File("E:\\MyProjects\\Workspace\\DigesterDemo\\src\\com\\example\\demo\\digester\\example.xml");

                    

                     Catalog c = (Catalog) digester.parse(input);

                     System.out.println(c.toString());

                 } catch (Exception exc) {

                     exc.printStackTrace();

                 }

              }

          }

           

          下面是XML文件:

          <?xml version="1.0"?>

          <catalog library="somewhere">

              <book>

                 <author>Author 1</author>

                 <title>Title 1</title>

              </book>

              <book>

                 <author>Author 2</author>

                 <title>His One Book</title>

              </book>

              <magazine>

                 <name>Mag Title 1</name>

                 <article page="5">

                     <headline>Some Headline</headline>

                 </article>

                 <article page="9">

                     <headline>Another Headline</headline>

                 </article>

              </magazine>

              <book>

                 <author>Author 2</author>

                 <title>His Other Book</title>

              </book>

              <magazine>

                 <name>Mag Title 2</name>

                 <article page="17">

                     <headline>Second Headline</headline>

                 </article>

              </magazine>

          </catalog>

          posted on 2008-10-16 10:46 王總兵 閱讀(268) 評(píng)論(0)  編輯  收藏 所屬分類: Digester

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大渡口区| 巴南区| 应城市| 永靖县| 沈阳市| 砚山县| 高陵县| 常宁市| 宁城县| 邵东县| 高青县| 桃园县| 诸暨市| 措美县| 沙雅县| 虎林市| 农安县| 右玉县| 延边| 红原县| 盱眙县| 阿巴嘎旗| 彩票| 毕节市| 大余县| 都江堰市| 长葛市| 芷江| 杭锦后旗| 公安县| 兴安县| 娱乐| 克东县| 黄冈市| 台前县| 安丘市| 宜兴市| 遂昌县| 陈巴尔虎旗| 德保县| 高安市|