Java: 玩转schema+xmlbeans (2)

手写xml是个很痛苦的事情,手写schema更痛苦.即使用xmlspy,还是有些东西写不出来,比如复杂的数据限制.

xmlbeans是bea捐赠给apache的根据schema生成Java Bean的工具.上面的schema通过编译:
    scomp -src src test.xsd
生成如下类:(注意package是xsd的targetNamespace,可以通过配置文件调整)
Java: 玩转schema+xmlbeans (2)
其中Gender的枚举类型被自动生成嵌套枚举类,是不是很方便呢?

public   interface  Gender extends org.apache.xmlbeans.XmlString
{
    
static final Enum 男 = Enum.forString("");
    
static final Enum 女 = Enum.forString("");
}

测试一下:

        Arenumber area  =  Arenumber.Factory.newInstance();
        area.setStringValue(
" 0467 " );
        System.
out .println(area);
        System.
out .println( " 验证结果: " + area.validate());
        Gender gender 
=  Gender.Factory.newInstance();
        gender.setStringValue(Gender.女.toString());
        System.
out .println(gender);
        System.
out .println( " 验证结果: " + gender.validate());
        ChineseName cn 
=  ChineseName.Factory.newInstance();
        cn.setStringValue(
" " );
        System.
out .println(cn);
        System.
out .println( " 验证结果: " + cn.validate());

运行结果:
<xml-fragment>
0467
</xml-fragment>
验证结果:true
<xml-fragment>

</xml-fragment>
验证结果:true
<xml-fragment>

</xml-fragment>
验证结果:false

注意:
    ChineseName的验证结果为false,因为长度不符合.
    因为schemaType只描述数据,<xml-fragment>只是匿名容器
除了上面的newInstance()和validate()方法,还有一些其它实用方法:

        Gender.Factory.newValue(Object); // 生成新实例
        Gender.Factory.parse(File);
        Gender.Factory.parse(Reader);
        Gender.Factory.parse(InputStream);
        Gender.Factory.parse(Node);
        Gender.Factory.parse(URL);
        Gender.Factory.parse(String);        
        cn.newDomNode(); 
// 生成DOM
        cn.newInputStream();  // 生成InputStream
        cn.newReader();  // 生成Reader
        cn.xmlText();  // 生成xml文本
        cn.schemaType();  // 拿到编译后的Schema.用途稍后再说
        cn.save(File); 
        cn.save(Writer);
        cn.save(OutputStream);
        cn.selectPath(
" some/path[here='where'] " );  // xpath



 

你可能感兴趣的:(schema)