A XMLBean Tip

A XMLBean Tip

         XMLBean的确是一个非常方便的工具,可以根据XSD来生成Java Class,使得我们以非常舒服的面向对象的方式读写XML,比.Net世界里面的XmlDocument和XmlNode对象来得更加直观。不过,Java世界里面的文档真的是令人不敢恭维,从代码生产的粗陋的Java Doc就当作API Ref,根本不能和微软的MSDN相提并论,这在我使用Java的多种开发工具和Lib的时候,一次次地加深了这样的印象。
        前段时间我使用XMLBean来生成xml串,我的过程是这样的:1、使用XMLSpy写好XSD,然后使用XMLBean帮我生成Java Class。2、使用这些Java Class来创建Document,数据来源则是数据库 3、获得生成的document的XML String。3、适应Web Service将这些XML String发送到远程服务器。4、远程服务器会根据XSD对收到的XML进行校验,以检查是否符合规范。 结果问题来了,远程服务器(程序是另外一个公司的人写的,但使用的是相同的XSD)总是校验不通过。经过检查,我发现XMLBean生成的XML Element的节点标签和XSD中定义的并不完全一致,比如我在XSD中定义了:
None.gif < xs:element  name ="MyVeryLongTagName" >

<xs:element name="MyLongElementName">而生成的xml中则是
None.gif < MVLTN > dot.gif </ MVLTN >
这样的内容,从表面上来看,XMLBean为我生成了Tag的缩写形式,而这不是我想要的。查了XMLBean的粗陋的Java Doc,试了多个API才解决了问题,现在将小Tip列出来: 保证生成的XML的Element的Tag名称和XSD中定义的名称完全一致,需要作额外的工作,如:
None.gif MyXmlDocument doc  =  MyXmlDocument.Factory.newInstance();
None.gif
// create and set xml node value dot.gif
None.gif
None.gif
// set XmlOptions 
None.gif
XmlOptions opt  =   new  XmlOptions();
None.gifMap map 
=   new  HashMap();
None.gifmap.put(
" my Xml namespace " , " xmlnsNameInXml " );
None.gifmap.put(
" my element tag name " , " elementTagNameInXml " );
None.gif
// set use implicit namespaces
None.gif
opt.setSaveImplicitNamespaces(map);
None.gif
None.gif
// get xml string
None.gif
String xmlString  =  doc.xmlText(opt);

这样设置了以后,XMLBean就不会自作聪明的把XSD里面我们定义的比较长的Element Tag Name和XML NS设置为比较简略的缩写名称了。
</xs:element>

 

821119.html?type=1&amp;webview=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值