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">

<?XML:NAMESPACE PREFIX = XS />而生成的xml中則是
None.gif<MVLTN>dot.gif</MVLTN>
這樣的內容,從表面上來看,XMLBean爲我生成了Tag的縮寫形式,而這不是我想要的。查了XMLBean的粗陋的Java Doc,試了多個API才解決了問題,現在將小Tip列出來: 保證生成的XML的Element的Tag名稱和XSD中定義的名稱完全一致,需要作額外的工作,如:
None.gifMyXmlDocument 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設置爲比較簡略的縮寫名稱了。

 

821119.html?type=1&webview=1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章