以对象的方式处理XML
优点:不需要使用dom4j、SAX或DOM,在XML文件的格式有任何变动时,
只需要经过一次编译。不象其它方式要手动修改大量代码。以下以jdk5及JWSDP2.0为例(更详细的内容请参考JWSDP2.0的文档)
如果你使用的是JDK1.4及以下,只能下载JWSDP1.6,处理XML的方式与以下大同小异。
1、下载并安装Java Web Services Developer Pack 2.0
下载地址:http://java.sun.com/webservices/downloads/webservicespack.html2、定义一个config.xsd文件(存放到包foo中):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="config" type="configType"/>
<xs:complexType name="configType">
<xs:sequence>
<xs:element name="ip" type="xs:string"/>
<xs:element name="port" type="xs:int"/>
<xs:element name="database" type="databaseType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="databaseType">
<xs:sequence>
<xs:element name="ip" type="xs:string"/>
<xs:element name="port" type="xs:int"/>
<xs:element name="dbName" type="xs:string"/>
<xs:element name="username" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>3、定义一个xjb文件(存放到包foo中)<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <jxb:bindings schemaLocation="config.xsd" node="/xs:schema"><!-- schemaLocation属性是xsd文件的相对路径 -->
    <jxb:globalBindings fixedAttributeAsConstantProperty="true" collectionType="java.util.ArrayList" typesafeEnumBase="xs:NCName" choiceContentProperty="false" typesafeEnumMemberName="generateError" bindingStyle="elementBinding" enableFailFastCheck="false" generateIsSetMethod="false" underscoreBinding="asCharInWord"/>
    <jxb:schemaBindings>
      <jxb:package name="foo.config"/>
      <!-- 这里是生成的JAVA类文件存放包名 -->
    </jxb:schemaBindings>
    <jxb:nameXmlTransform>
      <jxb:elementName suffix="Element"/>
    </jxb:nameXmlTransform>
    <!-- 这里是定义xsd中一个复合类型与Java类的映射(如果要修改才定义,不修改则不需要) -->
    <jxb:bindings node="//xs:complexType[@name='configType']">
      <jxb:class name="configType"/>
      <!-- 这里是定义复合类型的一个元素名称与Java类中属性的映射(如果要修改才定义,不修改则不需要) -->
      <jxb:bindings node=".//xs:element[@name='ip']">
        <jxb:property name="ip"/>
      </jxb:bindings>
    </jxb:bindings>
  </jxb:bindings>
</jxb:bindings>
4、定义Ant的编译文件并编译:<project default="xjc">
  <!--这里是jwsdp的安装目录 -->
  <property name="jwsdp.home" value="D:\java\jwsdp-2.0"/>
  <path id="xjc.classpath">
    <pathelement path="src"/>
    <pathelement path="classes"/>
    <pathelement path="schemas"/>
    <!--for use with bundled ant-->
    <fileset dir="${jwsdp.home}" includes="jaxb/lib/*.jar"/>
    <fileset dir="${jwsdp.home}" includes="sjsxp/lib/*.jar"/>
    <fileset dir="${jwsdp.home}" includes="jwsdp-shared/lib/activation.jar"/>
    <fileset dir="${jwsdp.home}" includes="jwsdp-shared/lib/resolver.jar"/>
  </path>
  <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask" classpathref="xjc.classpath"/>
  <target name="xjc">
    <xjc destdir="src" binding="foo/config.xjb" schema ="foo/config.xsd"/>
  </target>
</project>
5、在foo.config包中会生成一些类文件:
ObjectFactory.java
ConfigType.java
DatabaseType.java
6、对象输出为XML:
JAXBContext context = JAXBContext.newInstance(ObjectFactory.class);
ObjectFactory of = new ObjectFactory();
ConfigType config=of.createConfigType();
//设定config的其它属性
config.setIp("127.0.0.1");DatabaseType dt=of.createDatabaseType();
..config.setDatabase(dt);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty( "jaxb.encoding", "UTF-8" );
marshaller.marshal( config, System.out );//输出XML到控制台7、XML转换为对象:JAXBContext context = JAXBContext.newInstance(ObjectFactory.class);
InputStream is=...//XML输入流
Unmarshaller unmarshaller=context.createUnmarshaller();
ConfigType config=unmarshaller.unmarshal(is);