sun推出jaxb(javatm architecture for xml binding )已经有很长一段时间了。下面我来简单介绍一下,什麽是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!
这就结束了吗?这莫简单嘛?
没错,就是这莫简单。并且运行效率还是很不错的
闽公网安备 35060202000074号