xmlbean+xmlspy 编辑xml



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了!