一、安装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

该命令的语法格式如下

  1. scomp [options] [dirs]* [schemaFile.xsd]* [service.wsdl]* [config.xsdconfig]*

主要参数说明:

  1. -src [dir] -- 生成的Java Classes存放目录
  2. -srconly -- 不编译Java Classes,不产生Jar文件
  3. -out [jarFileName] -- 生成的Jar文件,缺省是xmltypes.jar
  4. -compiler -- Java编译器的路径,即Javac的位置
  5. schemaFile.xsd -- XML Schema文件位置
  6. 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. }

AddressBean.java

  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. }

AddressesBean.java

  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. }

UserBean.java

6.3 项目下载地址

https://gitee.com/shizuru/xmlbeans-2.6.0

XML工具——xmlbeans的使用的更多相关文章

  1. TestLink学习七:TestLink测试用例Excel转换XML工具

    TestLink对于测试用例的管理来说,是蛮强大的,但是在导入导出这块,功能有点弱,本文针对测试用例的导入,转载了一个Excel转换成xml工具. 1.根据到处的测试用例xml,定义一下我的Excel ...

  2. XML工具类 - XmlUtils.java

    XML工具类,提供序列化XML.反序列化XML.获取指定节点的值的方法. 源码如下:(点击下载 - XmlUtils.java.dom4j-1.6.1.jar.xstream-1.4.7.jar ) ...

  3. 转:TestLink1.9.3测试用例:Excel转换XML工具<二>实现代码

    TestLink1.9.3测试用例:Excel转换XML工具<二>实现代码 http://blog.csdn.net/candle806/article/details/7490599 以 ...

  4. JaxbUtil转json转XML工具类

    json转换为XML工具类 package com.cxf.value; import org.springframework.util.StringUtils; import javax.xml.b ...

  5. Java常用工具类---XML工具类、数据验证工具类

    package com.jarvis.base.util; import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...

  6. 一款很不错的html转xml工具-Html Agility Pack 实现html转Xml

    [转]一款很不错的html转xml工具-Html Agility Pack 之前发个一篇关于实现html转成xml的劣作<实现html转Xml>,受到不少网友的关心.该实现方法是借助htm ...

  7. xml文档的解析并通过工具类实现java实体类的映射:XML工具-XmlUtil

    若有疑问,可以联系我本人微信:Y1141100952 声明:本文章为原稿,转载必须说明 本文章地址,否则一旦发现,必追究法律责任 1:本文章显示通过 XML工具-XmlUtil工具实现解析soap报文 ...

  8. DOM4j XML 工具类

    之前项目有跟客户系统对接一个webservice系统,该接口有传参和返回都是xml,所以找时间百度研究了一下dom4j,dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件 ...

  9. android 解析XML 工具类

    /** * Created by John on 2016/3/29. */ public class XmlParser { private static final String ns = nul ...

随机推荐

  1. vue-cli脚手架构建项目

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. 一.安装node.js 二.安装vue-cli npm install -g vue-cl ...

  2. PHP 之文件上传类封装

    一.前端代码 <!doctype html> <html lang="en"> <head> <meta charset="UT ...

  3. linux安装maven简易步骤

    版本要求maven3.6.1 软件下载 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3 ...

  4. 重读APUE(10)-中断的系统调用

    如果进程在执行一个低速系统调用而阻塞期间捕获到一个信号,则该系统调用就会被中断而不再继续执行:该系统调用返回出错,其errno设置为EINTR: 系统将系统调用分成两类:低速系统调用和其他系统调用:低 ...

  5. 使 nodejs 代码 在后端运行(forever)

    情境 运行nodejs的程序,使用命令:node xxx.js,但是关掉终端,程序也关闭了,如何让node app的程序一直运行? 解决 1.安装forever npm install -g fore ...

  6. 【java】[sql]使用Java程序向MySql数据库插入一千万条记录,各种方式的比较,最后发现insert批量插入方式对效率提升最明显

    我的数据库环境是mysql Ver 14.14 Distrib 5.6.45, for Linux (x86_64) using EditLine wrapper 这个数据库是安装在T440p的虚拟机 ...

  7. Linux设备驱动程序学习----目录

    目录 设备驱动程序简介 1.设备驱动程序简介 构造和运行模块 2.内核模块和应用程序的对比 3.模块编译和装载 4.模块的内核符号表  5.模块初始化和关闭  6.模块参数  7.用户空间编写驱动程序 ...

  8. (翻译) How variables are allocated memory in Javascript? | scope chain | lexicial scope

    总结: 阅读下面文章需要15分钟 提问者的问题是JavaScript中内存是怎么分配的,在介绍的过程作者涉及计到了JS中 Scope Chain和调用函数call生成lexicial environm ...

  9. mysql连接工具记录

    港优: Sequel pro   

  10. gateway启动报错:org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found

    将pom.xml中关于spring-boot-start-web模块的jar依赖去掉. 错误分析: 根据上面描述(Description)中信息了解到GatewayAutoConfiguration这 ...