DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> Castor的XML數據綁定應用
Castor的XML數據綁定應用
編輯:XML詳解     

Java與.Net最大不同之處在於,Java是在開放源代碼領域中成長的,所以,你不必苦苦等待某一個公司的產品開發進度,在開源領域,每天都誕生有關Java令人激動的新技術,你可以仔細研究它,可能是昙花一現,更可能是一種全新技術的發現,這種心情已經讓你忘記了自己孤獨的境遇。

  Castor無疑是一種新的實用的概念,它的XML對象化操作和JDO概念都是令人激動的。我們這裡只談談它的XML數據綁定技術。

  對XML操作,我們已經知道SAX DOM 和JDOM, Castor有什麼不同?

  Castore能夠將XML數據映射成Java對象數據,這樣你只要和Java數據對象操作,就相當於對XML數據操作,這種概念無疑方便我們將XML作為類似數據庫那樣的數據源。

  我們知道,現在操作數據庫通過EJB JDO來實現對Java對象數據操作,Castor為我們提供了對XML的這樣的操作,這樣豈不是更方便?而SAS DOM JDOM是對XML中具體數據結構進行操作,沒有Castor那樣完全對象化的概念。

  舉例說明:

  有page.XML文件如下

  <homepagecollection name="this is sample">
  <homepagecontent id="1">
  <name>About Us</name>
  <navlink>1.JSP</navlink>
  <icon>images/icon.gif</icon>
  <description>An in-depth look at creating applications with XML.</description>
  </homepagecontent>
  <homepagecontent id="2">
  <name>Product|Service</name>
  <navlink>2.JSP</navlink>
  <icon>images/icon.gif</icon>
  <description>let's tak a look at our products.</description>
  </homepagecontent>
  </homepagecollection>

  這是個很典型的XML文件,homepagecollection中有多個homepagecontent

那麼使用Castor,我們只要建立兩個對象,就可以對這個XML文件進行讀寫操作。

  public class Homepagecontent implements Java.io.Serializable{
  private Integer id;
  private String name;
  private String navlink;
  private String icon;
  private String description;
  public Homepagecontent(){
  }
  public Integer getId(){ return id;}
  public void setId(){ this.id=id;}
  public String getName(){ return name;}
  public void setName(){ this.name=name;}
  public String getNavlink(){ return navlink;}
  public void setLink(){ this.navlink=navlink;}
  public String getIcon(){ return icon;}
  public void setIcon(){ this.icon=icon;}
  public String getDescription(){ return description;}
  public void setDescription(){ this.description=description;}
  }

  上面這個Javabean中,setXXXX和getXXXX中的XXXX就是page.XML中homepagecontent中對應名稱。

  這個很類似於Javabean和數據庫之間的對應關系。

  再來看看Homepagecollection.Java

  public class Homepagecollection implements Java.io.Serializable{
  private String SiteName;
  private List homepagecontents = new ArrayList();
  public Homepagecollection() { }
  // -- manipulate the List of Page objects
  public void addHomePageContent(Homepagecontent homepagecontent) {
  homepagecontents.add(homepagecontent);
  }
  public List getHomepagecontents() {
  return homepagecontents;
  }
  // -- manipulate the name of the address book
  public String getName() {
  return SiteName;
  }
  public void setName(String name) {
  this.SiteName = name;
  }
  }

  Homepagecollection.Java就是對應page.xml 由於page.XML中Homepagecollection內包含多個Homepage,程序裡使用List來表示。

那麼page.XML中的數據如何讀入Homepagecollection.Java中?

public HomePageHandle(String mapfile,String XMLfile) throws Exception{
  this.xmlfile=XMLfile;
  try{
  mapping = new Mapping();
  mapping.loadMapping(mapfile);
  }catch(Exception e){
  throw new Exception(e.getMessage());
  }
  }
  // -- page.XML中的數據讀入Homepagecollection
  public Homepagecollection read() throws Exception{
  Homepagecollection homepages=null;
  try{
  Unmarshaller un = new Unmarshaller(Homepagecollection.class);
  un.setMapping(mapping);
  FileReader in = new FileReader(XMLfile);
  homepages = (Homepagecollection) un.unmarshal(in);
  in.close();
  }catch(Exception e){
  throw new Exception(e.getMessage());
  }
  return homepages;
  }

  注意。只要使用Unmarshaller這一句就將XML的數據讀入JavaBean Homepagecollection中,這樣以後只要對Homepagecollection.class進行數據操作就可以。

  比如使用Homepagecollection.getName()就可以得到page.XML中的"this is sample".

  是不是很方便?

  注意這裡要配置mapping.XML文件:

<?XML version="1.0" encoding="UTF-8"?>
  <mapping>
  <description>a map file for our new template system</description>
  <class name="Homepagecontent">
  <map-to XML="homepagecontent"/>
  <fIEld name="id" type="integer">
  <bind-XML name="id" node="attribute" />
  </fIEld>
  <fIEld name="name" type="string" />
  <fIEld name="navlink" type="string" />
  <fIEld name="icon" type="string" />
  <fIEld name="description" type="string" />
  </class>
  <class name="Homepagecollection">
  <map-to XML="homepagecollection"/>
  <fIEld name="name" type="string">
  <bind-XML name="name" node="attribute" />
  </fIEld>
  <fIEld name="homepagecontents" type="Homepagecontent" collection="collection" />
  </class>
  </mapping>

  這個文件主要讓Castor來對page.XML和Homepagecollection.class Homepagecontent.class裝載(Unmarshaller)或卸載(Marshaller)數據用。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved