最近的项目中有个生成xml字符串的需求:
第三方合作伙伴提交一个请求,我们作为server端负责从DB中查询出符合条件的记录,然后构造成xml字符串返回给第三方合作伙伴。
以前有过dom的使用经验,但dom的缺点大家都知道:当xml比较复杂时,性能不是很好。当DB中记录比较多时,需要构造的xml会比较复杂。网上大家都说XmlBeans不错,这次尝试使用下,以下是具体的应用过程。
1. 准备工作
一、下载XmlBeans
必需的软件:XmlBeans安装包( 我们这里以XmlBeans 2.2.0为例)
二、设置环境变量(windows下和Linux下的基本一致)
(一) 修改PATH 环境变量把xmlbean\bin目录加入:%XMLBEANS_HOME%\bin.
(二) 修改CLASSPATH环境变量,添加XmlBean相关的几个jar包。
2. 定义xml文件格式,及生成xsd文件。
(一) 根据需要定义xml文件格式,可以不添加具体的数据,例如:
<?xml version="1.0" encoding="UTF-8"?>
<response >
<record>
<id/>
<order_username/>
<order_time/>
</record>
</response>
(二) 生成xsd文件。
可以使用XMLSPY通过XML文件来生成Schema文件,当然手工写是更好的。网上可以很容易找到XMLSPY。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--W3C Schema 由 XMLSpy v2006 U 创建 (http://www.altova.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="id" type="xs:string"/>
<xs:element name="order_time" type="xs:string"/>
<xs:element name="order_username" type="xs:string"/>
<xs:element name="record">
<xs:complexType>
<xs:sequence>
<xs:element ref="id"/>
<xs:element ref="order_username"/>
<xs:element ref="order_time"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="response">
<xs:complexType>
<xs:sequence>
<xs:element ref="record"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
3. 使用XmlBeans命令生成xml对应的jar包和源文件。
scomp -src build\src -out build\testXmlBean.jar schema\test.xsd -compiler
C:\jdk150_12\bin\javac
scomp生成testXmlBean.jar,放在build目录下,同时生成源代码放在build\src下,Schema文件是test.xsd,我们要的是jar文件。
4. 制定testXmlBean.jar中类的路径。
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
<xb:namespace>
<xb:package>test.pkg</xb:package>
</xb:namespace>
</xb:config>
test.pkg是testXmlBean.jar中的类所在的路径,这个是必须要制定的。
5. 构造xml文件。
根据DB中的数据,构造xml记录,常用于和第三方的数据通讯。
public static String createXML(List testList) {
StringBuffer xmlGen = new StringBuffer();
try{
ResponseDocument newPODoc = ResponseDocument.Factory.newInstance();
Response response = newPODoc.addNewResponse();
for(int i = 0; i < testList.size(); i++){
TestDTO testDTO = (TestDTO) testList.get(i);
Record record = response.addNewRecord();
record.setId(String.valueOftestDTO.getId)));
record.setOrderUsername(testDTO.getUsername());
record.setOrderTime(testDTO.getSubmitdate());
response.setRecordArray(i, record);
}
//生成xml文件
newPODoc.save(new File("/data/test/test" + DateUtils.dateToLongString(new Date()) + ".xml"));
xmlGen.append(newPODoc.xmlText());//xml字符串
}catch(Exception e){
e.printStackTrace();
}
return xmlGen.toString();
}
本文介绍了一种利用XmlBeans工具高效生成复杂XML文件的方法。包括准备环境、定义XML格式、生成对应jar包的过程,并提供了构造XML文件的具体示例。
1424

被折叠的 条评论
为什么被折叠?



