`
FrankTiger
  • 浏览: 3919 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

jaxb浅谈(xml、xsd)

阅读更多
最近项目中需求要将用户上传的xml文件信息导入数据库,项目中使用sun提供的jaxb来解析xml文件并生成java对象,本人根据项目应用和网上的一些评论总结了下
对jaxb的应用,欢迎板砖,废话不多说了
首先我们要从sun下载一个jaxb的压缩包,在命令行模式下,将目录转到jaxb-ri-20101209.jar,用命令java -jar jaxb-ri-20101209.jar
这样,在该目录下会生成一个文件夹jaxb-ri-20101209,文件夹中有bin,docs,lib,samples,看目录就应该明白,在此就不做解释了。

在命令行中进入到安装目录的bin文件夹下运行xjc指令,如果不出现“xjc”is not recogized。。。证明安装成功

使用xsd文件生成java类的方法
在命令行中进入文件夹jaxb-ri-20101209目录的bin文件夹
输入命令
xjc -d c:\test -p com.primeton.governor.dict.xmlloader c:\test\test.xsd

c:\test生成java类的目录
com.primeton.governor.dict.xmlloader生成java类的包路径
c:\test\test.xsd  xsd文件的目录
例如
test.xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="resource">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="servlet-mapping"/>
        <xs:element ref="servlet-class"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="servlet-mapping">
    <xs:complexType mixed="true">
      <xs:attribute name="id" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="servlet-class">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="test"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="test" type="xs:integer"/>
</xs:schema>

生成的java类为
ObjectFactory.java
Resource.java
ServletClass.java
ServletMapping.java

其中一个java类Resource.java,@XmlAccessorType,@XmlType,这是给引擎使用的
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "servletMapping",
    "servletClass"
})
@XmlRootElement(name = "resource")
public class Resource {

    @XmlElement(name = "servlet-mapping", required = true)
    protected ServletMapping servletMapping;
    @XmlElement(name = "servlet-class", required = true)
    protected ServletClass servletClass;

    /**
     * Gets the value of the servletMapping property.
     * 
     * @return
     *     possible object is
     *     {@link ServletMapping }
     *     
     */
    public ServletMapping getServletMapping() {
        return servletMapping;
    }

    /**
     * Sets the value of the servletMapping property.
     * 
     * @param value
     *     allowed object is
     *     {@link ServletMapping }
     *     
     */
    public void setServletMapping(ServletMapping value) {
        this.servletMapping = value;
    }

    /**
     * Gets the value of the servletClass property.
     * 
     * @return
     *     possible object is
     *     {@link ServletClass }
     *     
     */
    public ServletClass getServletClass() {
        return servletClass;
    }

    /**
     * Sets the value of the servletClass property.
     * 
     * @param value
     *     allowed object is
     *     {@link ServletClass }
     *     
     */
    public void setServletClass(ServletClass value) {
        this.servletClass = value;
    }
}


如何将xml文件转换为xsd文件
首先我们要从sun下载一个trang的压缩包,解压缩后会有一个trang.jar的文件
在命令行中进入trang.jar所在的目录,输入如下命令:
java -jar trang.jar XXX1.xml XXX2.xsd

XXX1.xml为当前文件夹目录下的xml文件,也是要转换的xml文件
XXX2.xsd文件为转换后的xsd文件

例如要转换的xml文件为test.xml
<resource>
	<servlet-mapping id="sm">*.action</servlet-mapping>
	<servlet-class name="sc">
		TestListence
		<test>1</test>
	</servlet-class>
</resource>


转换为的xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="resource">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="servlet-mapping"/>
        <xs:element ref="servlet-class"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="servlet-mapping">
    <xs:complexType mixed="true">
      <xs:attribute name="id" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="servlet-class">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="test"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="test" type="xs:integer"/>
</xs:schema>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics