`
zhaoyx
  • 浏览: 20976 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用XML文件直接生成点.java文件

阅读更多

对于用Jaxb解析xml的同行来说,这是个很好用的工具,我用了大约有3个月,省了不少工作量,一直自私没有分享,现在看网上有类似的文章出现,但是不够详细,我就分享一下用的效果。

在用Jaxb解析xml的时候,需要写好多javabean,并且各bean之间是有一定关系的,一旦xml文件结构比较复杂或者字段比较多时,做的工作会很无聊,而且容易出错,那就用工具来做吧。

 

首先,下载附件中的trang.jar包。放在任意文件夹中,我放在了C:\In中。同时把要转换的zhaoyx.xml文件也放在该文件夹中。建立生成.java文件的包zhaoyx。如图:



 

其次,win+R打开运行窗口,cmd进去,切换到C:\In目录下。

执行:java -jar trang.jar zhaoyx.xml zhaoyx.xsd  命令,执行后,如图:



 

 

在C:\In目录下多了zhaoyx.xsd文件



 

再次,在运行窗口执行xjc -p zhaoyx zhaoyx.xsd 命令行,然后就开始解析和生成java了,如下图:


 

在C:\In目录下就多了生成的javabean



 
最后,修改这些javabean,生成javabean是xml文件的一个结构映射,工具不是非常智能,一些特殊情况,需要手工改。下面说一下常用的修改。

 

1、终结点有时候生成的不是基本类型,如我生成的CAGENT.java代码中有SERIALNO.java型变量,但这个节点是<SERIALNO></SERIALNO>,显然这个类型是多余的,我把它改成String型,多余的类删掉即可。

 

2、生成<STARTDATE class="sql-date">2012-09-14</STARTDATE>节点的类不能用,需要删掉STARTDATE类,自己添加StartDate类,代码如下:

package zhaoyx;

 

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;

 

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "startdate")
public class StartDate {
   
    @XmlAttribute(name = "class")
    private String className;
   
    @XmlValue
    private String value;

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}
在Jaxb转换xml前,为对象设值,需要

packet.getBussdocinfo().getStartdate().setClassName("sql-date");
packet.getBussdocinfo().getStartdate().setValue("2012-09-14");

 

3、设计到List集合行的成员变量时需要手工修改,下面是个改好的java类,可以参考


package zhaoyx;

 

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "sumclause"
})
@XmlRootElement(name = "sumclauselist")
public class Sumclauselist {

    @XmlElement(required = true)
    protected List<Sumclause> sumclause;

 
    public List<Sumclause> getSumclause() {
        return sumclause;
    }


    public void setSumclause(List<Sumclause> value) {
        this.sumclause = value;
    }

}
生成的时候,这里不会是List类型。

  • 大小: 21.9 KB
  • 大小: 20.2 KB
  • 大小: 23.2 KB
  • 大小: 48 KB
  • 大小: 57.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics