Sun推出JAXB(JavaTM Architecture for XML Binding )已经有一段时间了,目前的版本是1。0(Final)。下面让我来简单介绍一下,什麽是JAXB和怎莫使用。 
JAXB是一套自动映射XML和Java实例的开发接口和工具。 
JAXB使XML更加方便的编译一个XML SCHEMA到一个或若干个JAVA CLASS。提供了如下功能: 
从XML到JAVA的映射,访问、更新、验证JAVA的表现,从JAVA到XML的映射。 
长话短说,开始正题,JAXB的使用,我们只列举从XML到JAVA的案例: 
什莫? 你不知道从哪里下载所需文件,不会吧。 
老大!当然是java.sun.com/xml/jaxb了 
首先要得到你想要转换的XML文件,我们DataSource为例,下表列举了DataSource.xml的内容: 
  
<?xml version="1.0"?> 
<DataSources> 
  <DataSource> 
      <name>oracle</name> 
      <driver>oracle.jdbc.driver.OracleDriver</driver> 
      <url>jdbc:oracle:thin:@localhost:1521:orcl</url> 
      <username>scott</username> 
      <password>tiger</password> 
  </DataSource> 
</DataSources> 
      并且,我们还要有此XML的DTD文件(如果你不知道怎莫从DTD得到XML,或者不知道如何从XML得到DTD,请两天后再看此文),DataSource.dtd文件如下: 
<?xml version='1.0' encoding="UTF-8"?> 
<!ELEMENT DataSource 
   (name,driver,url,username,password) 
> 
<!ELEMENT DataSources 
   (DataSource) 
> 
<!ELEMENT driver 
   (#PCDATA) 
> 
<!ELEMENT name 
   (#PCDATA) 
> 
<!ELEMENT password 
   (#PCDATA) 
> 
<!ELEMENT url 
   (#PCDATA) 
> 
<!ELEMENT username 
   (#PCDATA) 
> 
JAXB的使用还要配合一个转换规则的XML文件的使用,所以我们再根据我们的需要编写一个DataSource.xjs文件,如下所示: 
      <?xml version="1.0"?> 
<xml-java-binding-schema version="1.0ea"> 
<!-- Register a type.  This specifies that we want to use this type instead of String 
     somwhere in our document. --> 
<element name="DataSources" type="class" root="true" /> 
</xml-java-binding-schema> 
你觉得很复杂嘛?不要着急,马上就结束了。 
下一步就是运行如下命令了: 
   java -jar %JAXB_HOME%\lib\jaxb-xjc-1.0-ea.jar DataSource.dtd DataSource.xjs -d destination_directory 
你会看到在你指定的目录下,生成了我们想要的Java文件,你可以打开看看,到底是什莫东西。 
OK,准备工作这就结束了。 
让我们来看看如何使用我们生成的Java文件,使用前别忘了编译他们,这可是最基本的素质,我想不用我提醒了吧。 
      下面是一个测试程序的片断,看看到底灵不灵: 
      Datasources socks = new Datasources(); 
   。。。。 
   File socksFile = new File("DataSource.xml"); 
            InputStream fin = new FileInputStream(socksFile); 
            socks = socks.unmarshal(fin); 
List sockList = socks.getDatasource(); 
好了,sockList就是我们得到的Java的对象了。你可以随意处置。我们下面把他们打印出来看一看: 
   for (Iterator i = sockList.iterator(); i.hasNext();) { 
            currentSock = (Datasource)i.next(); 
        System.out.println(currentSock.getName()); 
        System.out.println(currentSock.getDriver()); 
        System.out.println(currentSock.getUrl()); 
        System.out.println(currentSock.getUsername()); 
        System.out.println(currentSock.getPassword()); 
        } 
OVER! 
这就结束了吗?这莫简单嘛? 
没错,就是这莫简单。并且运行效率还是很不错的。 
   
 
  |