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

 <?xml version="1.0" encoding="UTF-8"?>
<user>
<username></username>
<password></password>
<age></age>
<addresses>
<Chinese>
<nationality></nationality>
<cityProvince></cityProvince>
<district></district>
<address></address>
</Chinese>
<English>
<nationality></nationality>
<cityProvince></cityProvince>
<district></district>
<address></address>
</English>
</addresses>
</user>

若要生成该结构的xml文件,则XML Schema文件应编写为

 <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- 根节点user -->
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<!-- user子节点username 类型为String -->
<xs:element name="username" type="xs:string"/>
<!-- user子节点password 类型为String -->
<xs:element name="password" type="xs:string"/>
<!-- user子节点age 类型为BigDecimal(数字类型 不推荐使用 此处为举例) -->
<xs:element name="age" type="xs:decimal"/>
<!-- user子节点addresses 类型为自定义类型AddressesType -->
<xs:element name="addresses" type="AddressesType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- 自定义类型AddressesType -->
<xs:complexType name="AddressesType">
<xs:sequence>
<!-- addresses子节点Chinese 类型为自定义类型AddressType -->
<xs:element name="Chinese" type="AddressType"/>
<!-- addresses子节点English 类型为自定义类型AddressType -->
<xs:element name="English" type="AddressType"/>
</xs:sequence>
</xs:complexType>
<!-- 自定义类型AddressType -->
<xs:complexType name="AddressType">
<xs:sequence>
<!-- address子节点nationality 类型为String类型 -->
<xs:element name="nationality" type="xs:string"/>
<!-- address子节点cityProvince 类型为String类型 -->
<xs:element name="cityProvince" type="xs:string"/>
<!-- address子节点district 类型为String类型 -->
<xs:element name="district" type="xs:string"/>
<!-- address子节点address 类型为String类型 -->
<xs:element name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

2.2 配置文件

xsd配置文件(后缀为. xsdconfig)主要用来制定生成的Java Class的一些文件名规则和Package的名称

如下所示,生成的包名为com.xmlbeans

 <xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">  

   <xb:namespace>
<xb:package>com.xmlbeans</xb:package>
</xb:namespace> </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

编写构造类

 package com.xbean;

 import java.io.File;
import java.io.IOException;
import java.math.BigDecimal; import com.pojo.*;
import com.xmlbeans.*;
import com.xmlbeans.UserDocument.User; public class BuildXml { public static void main(String[] args) { UserBean userBean = getUser(); //生成DOM对象
UserDocument doc = UserDocument.Factory.newInstance();
//生成根节点user
User user = doc.addNewUser(); //user子节点username
user.setUsername(userBean.getUsername());
//user子节点password
user.setPassword(userBean.getPassword());
//user子节点age
user.setAge(userBean.getAge()); //生成user子节点addresses
AddressesType addresses = user.addNewAddresses();
AddressesBean addressesBean = userBean.getAddresses(); //生成addresses子节点chinese
AddressType chinese = addresses.addNewChinese();
AddressBean chineseAddress = addressesBean.getChinese();
//chinese子节点nationality
chinese.setNationality(chineseAddress.getNationality());
//chinese子节点cityProvince
chinese.setCityProvince(chineseAddress.getCityProvince());
//chinese子节点district
chinese.setDistrict(chineseAddress.getDistrict());
//chinese子节点address
chinese.setAddress(chineseAddress.getAddress()); //生成addresses子节点english
AddressType english = addresses.addNewEnglish();
AddressBean englishAdress = addressesBean.getEnglish();
//english子节点nationality
english.setNationality(englishAdress.getNationality());
//english子节点cityProvince
english.setCityProvince(englishAdress.getCityProvince());
//english子节点district
english.setDistrict(englishAdress.getDistrict());
//english子节点address
english.setAddress(englishAdress.getAddress()); //构造的xml文件
File xml = new File("user.xml");
try {
//保存
doc.save(xml);
} catch (IOException e) {
System.out.println("user.xml生成失败");
e.printStackTrace();
}
System.out.println("user.xml生成结束"); } /**
* 模拟实际环境 生成获取UserBean实体类对象
* @return user
*/
public static UserBean getUser(){
UserBean user = new UserBean();
user.setUsername("张三");
user.setPassword("123");
user.setAge(new BigDecimal("20")); AddressBean chinese = new AddressBean();
chinese.setNationality("中国");
chinese.setCityProvince("浙江");
chinese.setDistrict("杭州");
chinese.setAddress("123456"); AddressBean english = new AddressBean();
english.setNationality("Chinese");
english.setCityProvince("ZheJiang");
english.setDistrict("HangZhou");
english.setAddress("654321"); AddressesBean addresses = new AddressesBean();
addresses.setChinese(chinese);
addresses.setEnglish(english); user.setAddresses(addresses); return user;
} }

运行,结束后获得生成的user.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<user>
<username>张三</username>
<password>123</password>
<age>20</age>
<addresses>
<Chinese>
<nationality>中国</nationality>
<cityProvince>浙江</cityProvince>
<district>杭州</district>
<address>123456</address>
</Chinese>
<English>
<nationality>Chinese</nationality>
<cityProvince>ZheJiang</cityProvince>
<district>HangZhou</district>
<address>654321</address>
</English>
</addresses>
</user>

五、解析xml文件

以四中构造获得的user.xml为例进行解析

编写解析类

 package com.xbean;

 import java.io.File;

 import com.pojo.AddressBean;
import com.pojo.AddressesBean;
import com.pojo.UserBean;
import com.xmlbeans.AddressType;
import com.xmlbeans.AddressesType;
import com.xmlbeans.UserDocument;
import com.xmlbeans.UserDocument.User; public class ParseXml { public static void main(String[] args) {
//解析的xml文件
File xml = new File("user.xml");
UserBean user = parseXml(xml); System.out.println(user);
} /**
* 解析xml
* @param xml文件
* @return userBean
*/
public static UserBean parseXml(File xml){
UserBean userBean = new UserBean();
UserDocument doc = null;
try {
//解析xml获取DOM对象
doc = UserDocument.Factory.parse(xml);
} catch (Exception e) {
System.out.println("解析异常");
e.printStackTrace();
}
//获取根节点user
User user = doc.getUser(); //将xml中的值set进userBean对象中
userBean.setUsername(user.getUsername());
userBean.setPassword(user.getPassword());
userBean.setAge(user.getAge()); AddressesType addresses = user.getAddresses();
AddressesBean addressesBean = userBean.getAddresses(); AddressType chinese = addresses.getChinese();
AddressBean chineseBean = addressesBean.getChinese();
chineseBean.setNationality(chinese.getNationality());
chineseBean.setCityProvince(chinese.getCityProvince());
chineseBean.setDistrict(chinese.getDistrict());
chineseBean.setAddress(chinese.getAddress()); AddressType english = addresses.getEnglish();
AddressBean englishBean = addressesBean.getEnglish();
englishBean.setNationality(english.getNationality());
englishBean.setCityProvince(english.getCityProvince());
englishBean.setDistrict(english.getDistrict());
englishBean.setAddress(english.getAddress()); return userBean;
} }

输出结果: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下的类

 package com.pojo;

 public class AddressBean {
/**
* 国家
*/
private String nationality = "";
/**
* 城市
*/
private String cityProvince = "";
/**
* 市区
*/
private String district = "";
/**
* 详细地址
*/
private String address = ""; public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public String getCityProvince() {
return cityProvince;
}
public void setCityProvince(String cityProvince) {
this.cityProvince = cityProvince;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "AddressBean [nationality=" + nationality + ", cityProvince="
+ cityProvince + ", district=" + district + ", address="
+ address + "]";
}
}

AddressBean.java

 package com.pojo;

 public class AddressesBean {
/**
* 中文地址
*/
private AddressBean chinese = new AddressBean();
/**
* 英文地址
*/
private AddressBean english = new AddressBean(); public AddressBean getChinese() {
return chinese;
}
public void setChinese(AddressBean chinese) {
this.chinese = chinese;
}
public AddressBean getEnglish() {
return english;
}
public void setEnglish(AddressBean english) {
this.english = english;
} @Override
public String toString() {
return "AddressesBean [chinese=" + chinese + ", english=" + english
+ "]";
}
}

AddressesBean.java

 package com.pojo;

 import java.math.BigDecimal;

 public class UserBean {
/**
* 用户名
*/
private String username = "";
/**
* 密码
*/
private String password = "";
/**
* 年龄
*/
private BigDecimal age = new BigDecimal("0");
/**
* 地址
*/
private AddressesBean addresses = new AddressesBean(); public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public BigDecimal getAge() {
return age;
}
public void setAge(BigDecimal age) {
this.age = age;
}
public AddressesBean getAddresses() {
return addresses;
}
public void setAddresses(AddressesBean addresses) {
this.addresses = addresses;
} @Override
public String toString() {
return "UserBean [username=" + username + ", password=" + password
+ ", age=" + age + ", addresses=" + addresses + "]";
}
}

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. webpack - 优化阻塞渲染的css

    随着浏览器的日新月异,网页的性能和速度越来越好,并且对于用户体验来说也越来越重要. 现在有很多优化页面的办法,比如:静态资源的合并和压缩,code splitting,DNS预读取等等. 本文介绍的是 ...

  2. spring事物不回滚的问题

    学习spring分布式事务的时候,自己整了个demo,写test测试的时候发先事物没有回滚.此问题和分布式事务没关系.1.在service层引入@Transaction注解 使用 throw new ...

  3. Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑

    脚本运行的过程中,大量request抛error,但没有地方能够查看request是因为什么error的. 原因:Jmeter默认禁掉了运行过程中每个request的具体response信息收集,只保 ...

  4. 重读APUE(7)-link/unlink与mkdir/rmdir

    link–用于创建一个现有文件的链接:实际上是新建一个目录项,指向当前文件的i节点: unlink–用于删除一个现有文件的连接:实际上是对引用i节点的目录项进行删除,并且对链接计数-1:系统会检查文件 ...

  5. 安装VMware虚拟机和centos操作系统

    1,安装包:百度网盘: 2,安装教程:https://blog.csdn.net/qq_31362105/article/details/80706096  配置好操作系统,内存,网络等: 3,Cen ...

  6. 第04组 Beta冲刺(1)

    队名:斗地组 组长博客:地址 作业博客:Beta冲刺(1/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文档 ...

  7. linux下添加动态链接库路径、动态库加载等方法

    linux下添加动态链接库路径的方法 2017年01月20日 10:08:17 阅读数:5596   Linux共享库路径配置 Linux下找不到共享库文件的典型现象为明明已经安装某个软包(如libn ...

  8. 使用es6一句话去重

    let arr = [1,2,3,4,5,1,2,3] let arr2 = Array.from(new Set(arr)) console.log(arr2) //[1,2,3,4,5]

  9. multiprocessing.Pool报pickling error

    multiprocessing.Pool报pickling error 现象 multiprocessing.Pool传递一个普通方法(不在class中定义的)时, 能正常工作. from multi ...

  10. unittest快速装载目前下所有测试用例的方法

    import unittest from BeautifulReport import BeautifulReport #导入BeautifulReport if __name__ == '__mai ...