一、安裝xmlbeans
1.下載xmlbeans
下載地址:https://gitee.com/shizuru/xmlbeans-2.6.0
2.解壓,此處以解壓至D盤根目錄為例
3.配置環境變量(路徑不能有中文或空格)
(1)配置JAVA_HOME:D:\Java\jdk1.7.0_80
(2)配置XMLBEANS_HOME:D:\xmlbeans-2.6.0
(3)在path中添加%JAVA_HOME%\bin和%XMLBEANS_HOME%\bin
4.驗檢查安裝結果
打開cmd輸入scomp -version,如下即安裝成功
二、編寫XML Schema及其配置文件
2.1 XML Schema文件
XML Schema(后綴為.xsd)是基於XML的DTD替代者,可描述XML文檔的結構。它定義了XML文件的結構和元素以及對元素和結構的約束。
以下述User.xml為例
1 <?xml version="1.0" encoding="UTF-8"?> 2 <user> 3 <username></username> 4 <password></password> 5 <age></age> 6 <addresses> 7 <Chinese> 8 <nationality></nationality> 9 <cityProvince></cityProvince> 10 <district></district> 11 <address></address> 12 </Chinese> 13 <English> 14 <nationality></nationality> 15 <cityProvince></cityProvince> 16 <district></district> 17 <address></address> 18 </English> 19 </addresses> 20 </user>
若要生成該結構的xml文件,則XML Schema文件應編寫為
1 <?xml version="1.0" encoding="UTF-8"?> 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 3 <!-- 根節點user --> 4 <xs:element name="user"> 5 <xs:complexType> 6 <xs:sequence> 7 <!-- user子節點username 類型為String --> 8 <xs:element name="username" type="xs:string"/> 9 <!-- user子節點password 類型為String --> 10 <xs:element name="password" type="xs:string"/> 11 <!-- user子節點age 類型為BigDecimal(數字類型 不推薦使用 此處為舉例) --> 12 <xs:element name="age" type="xs:decimal"/> 13 <!-- user子節點addresses 類型為自定義類型AddressesType --> 14 <xs:element name="addresses" type="AddressesType"/> 15 </xs:sequence> 16 </xs:complexType> 17 </xs:element> 18 <!-- 自定義類型AddressesType --> 19 <xs:complexType name="AddressesType"> 20 <xs:sequence> 21 <!-- addresses子節點Chinese 類型為自定義類型AddressType --> 22 <xs:element name="Chinese" type="AddressType"/> 23 <!-- addresses子節點English 類型為自定義類型AddressType --> 24 <xs:element name="English" type="AddressType"/> 25 </xs:sequence> 26 </xs:complexType> 27 <!-- 自定義類型AddressType --> 28 <xs:complexType name="AddressType"> 29 <xs:sequence> 30 <!-- address子節點nationality 類型為String類型 --> 31 <xs:element name="nationality" type="xs:string"/> 32 <!-- address子節點cityProvince 類型為String類型 --> 33 <xs:element name="cityProvince" type="xs:string"/> 34 <!-- address子節點district 類型為String類型 --> 35 <xs:element name="district" type="xs:string"/> 36 <!-- address子節點address 類型為String類型 --> 37 <xs:element name="address" type="xs:string"/> 38 </xs:sequence> 39 </xs:complexType> 40 </xs:schema>
2.2 配置文件
xsd配置文件(后綴為. xsdconfig)主要用來制定生成的Java Class的一些文件名規則和Package的名稱
如下所示,生成的包名為com.xmlbeans
1 <xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config"> 2 3 <xb:namespace> 4 <xb:package>com.xmlbeans</xb:package> 5 </xb:namespace> 6 7 </xb:config>
三、生成jar包
以上編寫的2個文件放置路徑為D:/Java目錄下
打開cmd,輸入 scomp -out D:/Java/User.jar D:/Java/User.xsd -compiler D:/Java/jdk1.7.0_80/bin/javac D:/Java/User.xsdconfig
該命令的語法格式如下
scomp [options] [dirs]* [schemaFile.xsd]* [service.wsdl]* [config.xsdconfig]*
主要參數說明:
-src [dir] -- 生成的Java Classes存放目錄
-srconly -- 不編譯Java Classes,不產生Jar文件
-out [jarFileName] -- 生成的Jar文件,缺省是xmltypes.jar
-compiler -- Java編譯器的路徑,即Javac的位置
schemaFile.xsd -- XML Schema文件位置
config.xsdconfig -- xsdconfig文件的位置
因此,命令的意思為在D:/Java目錄下生成User.jar,使用的XML Schema為D:/Java目錄下的User.xsd,其配置文件為D:/Java目錄下的User.xsdconfig,使用的編譯器為D:/Java/jdk1.7.0_80/bin/javac
成功運行如下圖所示
再次查看D:/Java目錄,發現多了一個User.jar
四、構造xml文件
將生成的jar包導入項目,同時也需要依賴jar包xbean.jar,下載地址:https://gitee.com/shizuru/xmlbeans-2.6.0
編寫構造類
1 package com.xbean; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.math.BigDecimal; 6 7 import com.pojo.*; 8 import com.xmlbeans.*; 9 import com.xmlbeans.UserDocument.User; 10 11 public class BuildXml { 12 13 public static void main(String[] args) { 14 15 UserBean userBean = getUser(); 16 17 //生成DOM對象 18 UserDocument doc = UserDocument.Factory.newInstance(); 19 //生成根節點user 20 User user = doc.addNewUser(); 21 22 //user子節點username 23 user.setUsername(userBean.getUsername()); 24 //user子節點password 25 user.setPassword(userBean.getPassword()); 26 //user子節點age 27 user.setAge(userBean.getAge()); 28 29 //生成user子節點addresses 30 AddressesType addresses = user.addNewAddresses(); 31 AddressesBean addressesBean = userBean.getAddresses(); 32 33 //生成addresses子節點chinese 34 AddressType chinese = addresses.addNewChinese(); 35 AddressBean chineseAddress = addressesBean.getChinese(); 36 //chinese子節點nationality 37 chinese.setNationality(chineseAddress.getNationality()); 38 //chinese子節點cityProvince 39 chinese.setCityProvince(chineseAddress.getCityProvince()); 40 //chinese子節點district 41 chinese.setDistrict(chineseAddress.getDistrict()); 42 //chinese子節點address 43 chinese.setAddress(chineseAddress.getAddress()); 44 45 //生成addresses子節點english 46 AddressType english = addresses.addNewEnglish(); 47 AddressBean englishAdress = addressesBean.getEnglish(); 48 //english子節點nationality 49 english.setNationality(englishAdress.getNationality()); 50 //english子節點cityProvince 51 english.setCityProvince(englishAdress.getCityProvince()); 52 //english子節點district 53 english.setDistrict(englishAdress.getDistrict()); 54 //english子節點address 55 english.setAddress(englishAdress.getAddress()); 56 57 //構造的xml文件 58 File xml = new File("user.xml"); 59 try { 60 //保存 61 doc.save(xml); 62 } catch (IOException e) { 63 System.out.println("user.xml生成失敗"); 64 e.printStackTrace(); 65 } 66 System.out.println("user.xml生成結束"); 67 68 } 69 70 /** 71 * 模擬實際環境 生成獲取UserBean實體類對象 72 * @return user 73 */ 74 public static UserBean getUser(){ 75 UserBean user = new UserBean(); 76 user.setUsername("張三"); 77 user.setPassword("123"); 78 user.setAge(new BigDecimal("20")); 79 80 AddressBean chinese = new AddressBean(); 81 chinese.setNationality("中國"); 82 chinese.setCityProvince("浙江"); 83 chinese.setDistrict("杭州"); 84 chinese.setAddress("123456"); 85 86 AddressBean english = new AddressBean(); 87 english.setNationality("Chinese"); 88 english.setCityProvince("ZheJiang"); 89 english.setDistrict("HangZhou"); 90 english.setAddress("654321"); 91 92 AddressesBean addresses = new AddressesBean(); 93 addresses.setChinese(chinese); 94 addresses.setEnglish(english); 95 96 user.setAddresses(addresses); 97 98 return user; 99 } 100 101 }
運行,結束后獲得生成的user.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <user> 3 <username>張三</username> 4 <password>123</password> 5 <age>20</age> 6 <addresses> 7 <Chinese> 8 <nationality>中國</nationality> 9 <cityProvince>浙江</cityProvince> 10 <district>杭州</district> 11 <address>123456</address> 12 </Chinese> 13 <English> 14 <nationality>Chinese</nationality> 15 <cityProvince>ZheJiang</cityProvince> 16 <district>HangZhou</district> 17 <address>654321</address> 18 </English> 19 </addresses> 20 </user>
五、解析xml文件
以四中構造獲得的user.xml為例進行解析
編寫解析類
1 package com.xbean; 2 3 import java.io.File; 4 5 import com.pojo.AddressBean; 6 import com.pojo.AddressesBean; 7 import com.pojo.UserBean; 8 import com.xmlbeans.AddressType; 9 import com.xmlbeans.AddressesType; 10 import com.xmlbeans.UserDocument; 11 import com.xmlbeans.UserDocument.User; 12 13 public class ParseXml { 14 15 public static void main(String[] args) { 16 //解析的xml文件 17 File xml = new File("user.xml"); 18 UserBean user = parseXml(xml); 19 20 System.out.println(user); 21 } 22 23 /** 24 * 解析xml 25 * @param xml文件 26 * @return userBean 27 */ 28 public static UserBean parseXml(File xml){ 29 UserBean userBean = new UserBean(); 30 UserDocument doc = null; 31 try { 32 //解析xml獲取DOM對象 33 doc = UserDocument.Factory.parse(xml); 34 } catch (Exception e) { 35 System.out.println("解析異常"); 36 e.printStackTrace(); 37 } 38 //獲取根節點user 39 User user = doc.getUser(); 40 41 //將xml中的值set進userBean對象中 42 userBean.setUsername(user.getUsername()); 43 userBean.setPassword(user.getPassword()); 44 userBean.setAge(user.getAge()); 45 46 AddressesType addresses = user.getAddresses(); 47 AddressesBean addressesBean = userBean.getAddresses(); 48 49 AddressType chinese = addresses.getChinese(); 50 AddressBean chineseBean = addressesBean.getChinese(); 51 chineseBean.setNationality(chinese.getNationality()); 52 chineseBean.setCityProvince(chinese.getCityProvince()); 53 chineseBean.setDistrict(chinese.getDistrict()); 54 chineseBean.setAddress(chinese.getAddress()); 55 56 AddressType english = addresses.getEnglish(); 57 AddressBean englishBean = addressesBean.getEnglish(); 58 englishBean.setNationality(english.getNationality()); 59 englishBean.setCityProvince(english.getCityProvince()); 60 englishBean.setDistrict(english.getDistrict()); 61 englishBean.setAddress(english.getAddress()); 62 63 return userBean; 64 } 65 66 }
輸出結果:UserBean [username=張三, password=123, age=20, addresses=AddressesBean [chinese=AddressBean [nationality=中國, cityProvince=浙江, district=杭州, address=123456], english=AddressBean [nationality=Chinese, cityProvince=ZheJiang, district=HangZhou, address=654321]]]
六、附錄
6.1 項目結構
6.2 com.pojo下的類

1 package com.pojo; 2 3 public class AddressBean { 4 /** 5 * 國家 6 */ 7 private String nationality = ""; 8 /** 9 * 城市 10 */ 11 private String cityProvince = ""; 12 /** 13 * 市區 14 */ 15 private String district = ""; 16 /** 17 * 詳細地址 18 */ 19 private String address = ""; 20 21 public String getNationality() { 22 return nationality; 23 } 24 public void setNationality(String nationality) { 25 this.nationality = nationality; 26 } 27 public String getCityProvince() { 28 return cityProvince; 29 } 30 public void setCityProvince(String cityProvince) { 31 this.cityProvince = cityProvince; 32 } 33 public String getDistrict() { 34 return district; 35 } 36 public void setDistrict(String district) { 37 this.district = district; 38 } 39 public String getAddress() { 40 return address; 41 } 42 public void setAddress(String address) { 43 this.address = address; 44 } 45 46 @Override 47 public String toString() { 48 return "AddressBean [nationality=" + nationality + ", cityProvince=" 49 + cityProvince + ", district=" + district + ", address=" 50 + address + "]"; 51 } 52 }

1 package com.pojo; 2 3 public class AddressesBean { 4 /** 5 * 中文地址 6 */ 7 private AddressBean chinese = new AddressBean(); 8 /** 9 * 英文地址 10 */ 11 private AddressBean english = new AddressBean(); 12 13 public AddressBean getChinese() { 14 return chinese; 15 } 16 public void setChinese(AddressBean chinese) { 17 this.chinese = chinese; 18 } 19 public AddressBean getEnglish() { 20 return english; 21 } 22 public void setEnglish(AddressBean english) { 23 this.english = english; 24 } 25 26 @Override 27 public String toString() { 28 return "AddressesBean [chinese=" + chinese + ", english=" + english 29 + "]"; 30 } 31 }

1 package com.pojo; 2 3 import java.math.BigDecimal; 4 5 public class UserBean { 6 /** 7 * 用戶名 8 */ 9 private String username = ""; 10 /** 11 * 密碼 12 */ 13 private String password = ""; 14 /** 15 * 年齡 16 */ 17 private BigDecimal age = new BigDecimal("0"); 18 /** 19 * 地址 20 */ 21 private AddressesBean addresses = new AddressesBean(); 22 23 public String getUsername() { 24 return username; 25 } 26 public void setUsername(String username) { 27 this.username = username; 28 } 29 public String getPassword() { 30 return password; 31 } 32 public void setPassword(String password) { 33 this.password = password; 34 } 35 public BigDecimal getAge() { 36 return age; 37 } 38 public void setAge(BigDecimal age) { 39 this.age = age; 40 } 41 public AddressesBean getAddresses() { 42 return addresses; 43 } 44 public void setAddresses(AddressesBean addresses) { 45 this.addresses = addresses; 46 } 47 48 @Override 49 public String toString() { 50 return "UserBean [username=" + username + ", password=" + password 51 + ", age=" + age + ", addresses=" + addresses + "]"; 52 } 53 }
6.3 項目下載地址
https://gitee.com/shizuru/xmlbeans-2.6.0