xmlbean+xmlspy 编辑xml

1、首先使用xmlspy定义xsd(xmlspy)

    两种方式:

    1)手工定义

      创建一个新的xsd文件,然后定义schema的命名空间(在程序中解析xml时必要的),create new document—>xsd w3c xml schema->schema design->schema setting->Target namespace输入你的namesprce(可以输入你公司的网址或者其他)

 

->ok。命名空间就创建好了。

接下来,开始创建你的元素,属性等等,具体的语法请滤过请参考我的另外一篇blog《xsd的语法》。

 

   2)同xml来生成xsd

   用xmlspy打开你定义的xml,->DTD/Schema->Generate DTD/Schema->ok ,过程中不用修改对话框中的任何属性。

   (问题:我在生成过程中string类型到xsd中就成了 Enum 类型,郁闷,请高手不吝赐教

 

 

2、 使用xmlbean通过xsd来生成java类

  设置xmlbean的环境变量,方法同设置java的classpath,或者像我这样写这个批处理

=========================bat======================================

      1:set path=E:/jdk1.6/bin
      2:xmlbeans-2.0.0/bin/scomp -out jars/aws.schema.jar schema/mine.xsd

=========================bat======================================

         第一行:设置环境变量

         第二行 :当前文件夹下包含xmlbeans-2.0.0,执行bin/scomp命令,根据 mine.xsd 生成jar文件,并放到jars文件夹下


3、使用生成的jar来操作xml

    一般情况下,你在xsd中定义了namespace ,生成的类的包名就是namespace的名字,如果没有定义namespace,那么生成的包名为?想不起来了!

    开始调用,比如你的xsd的根据元素为Person,那么生成的类为PersonDocument,接着

    File f = new File("xml name");

    PersonDocument doc = PersonDocument.Factory.parse(f);

   (此处建议parse时传入file,当然传入xml的文件名称也可以,但是如果出错,异常信息会让你超级郁闷,那是google不到的!)

    //然后person的下级元素为name,

    doc.getPersonConfig.getName();

   ........

   (以此类推,省略代码8000行)

 

   这里要注意一点,如果你的xsd没有namespace,直接parse xml会报错:(你的肯定和我的类似)

org.apache.xmlbeans.XmlException: E:/mydoc/mis.bak.xml:0: error: The document is not a awsmisconfig@http://xmlbeans.apache.org/mis/awsmisconfig: document element namespace mismatch expected "http://xmlbeans.apache.org/mis/awsmisconfig" got ""
    at org.apache.xmlbeans.impl.store.Locale.verifyDocumentType(Locale.java:452)
    at org.apache.xmlbeans.impl.store.Locale.autoTypeDocument(Locale.java:357)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1273)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:252)
    at org.apache.xmlbeans.mis.awsmisconfig.AwsmisconfigDocument$Factory.parse(Unknown Source)
    at com.actionsoft.awf.mis.config.ConfigUtil.readConfig(ConfigUtil.java:21)
    at com.actionsoft.awf.mis.config.ConfigUtil.main(ConfigUtil.java:76)

  其实xmlbean也意识到了这个问题,所以是有解决方法的,如下:

            HashMap params = new HashMap();
            params.put("", "http://xmlbeans.apache.org/mis/awsmisconfig");//此处就是设置namespace
            XmlOptions     parseOptions = new XmlOptions();
            parseOptions.setLoadSubstituteNamespaces(params);

            PersonDocument doc = PersonDocument.Factory.parse(f ,parseOptions );
  然后在解析就ok了!

 

以上就是本人在开发过程中的一点总结,希望对你能有帮助!

   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值