XmlBeans使用笔记

XmlBeans解决的问题

随着企业应用程序的复杂性不断加剧,XML 文档的约束和规则变得越来越严格。此外,随着业界越来越迅速地采用 Web 服务,XML 开始成为跨越多种平台的不可忽视的重要角色。所有这一切意味着,应用程序迫切需要一种简单而强大的机制来处理 XML。

XMLBeans 提供了这样一种机制,可以将 XMLBeans 用于 XML 数据绑定。与其他只支持 W3C XML Schema 规范的某个子集的数据绑定技术不同,XMLBeans 支持完整的规范,从这方面来说,它非常强大。对于习惯于面向对象操作的开发人员来说,它还惊人地易用。

通过 XMLBeans,您可以使用 Java 类访问和操纵 XML 文档中包含的数据。

它是如何做到这些的呢?实际上,它包括两个步骤:

  1. XML 模式的对象表示。这种对象表示是一组普通的 Java 类和接口,用于表示模式的结构和约束。
  2. 符合上述模式的实际 XML 实例文档被绑定到第1步生成的 Java 类和接口的实例。绑定过程需要使用 XMLBeans API,以面向对象的方式访问真正的 XML 实例文档中的数据。

一旦 XMLBeans 编译器生成了和模式对应的一般 Java 类和接口,任何符合该模式的 XML 实例文档都可以使用这些类和接口绑定。XMLBeans 比传统的解析更进了一步,因为用户不再需要进行以下操作:

  • 导航内存中的数据树中的每个节点。
  • 编写回调方法,从 XML 文档中提取信息。(关于 XMLBeans 和解析的比较,请参阅本文后面的 XMLBeans 的优点。)

XmlBeans与常见Xml解析技术比较优势

XMLBeans 面临着传统解析和绑定技术的竞争,如 DOM、SAX、JAXB 和 Castor,但 XMLBeans 有一些独到之处。它们的比较如下:

  • DOM 在内容中生成整个文档的树。如果文档非常大,DOM 就会变得对内存非常敏感,并会显著降低性能。通过增量解组(incremental unmarshalling)并提供xget 方法来访问内置的模式数据类型,XMLBeans 取得了较好的性能。
  • 与 DOM 相比,SAX 对内存要求不高,但是 SAX 要求开发人员为事件处理程序编写回调方法,而 XMLBeans 则不需要。
  • 与 XMLBeans 类似,JAXB 和 Castor 也都是 XML/Java 绑定技术,但它们都没有提供百分之百的模式支持。XMLBeans 最大的优势之一是几乎百分之百的支持 XML Schema。此外,XMLBeans 还能够访问完整的 XML Infoset,对于强调元素顺序或者注释的应用程序,这一点特别有用。
  • XMLBeans 还提供了解析 XML 实例的即时验证。
  • XMLBeans 包括一些创新的特性,如 XML 游标和对 XQuery 的支持。

以上内容转自IBMhttp://www.ibm.com/developerworks/cn/xml/x-beans1/

XmlBeans下载及安装

  • 下载XmlBeans:Apache XmlBeans 官网地址:http://xmlbeans.apache.org/ ,可下载最新版本进行安装,本文使用2.5.0版本。
  • XmlBeans运行环境须具备:JDK1.4以上及Ant,本文使用JDK1.6.0_01,及Ant1.8.4。Apache Ant 官网地址:http://ant.apache.org/ ,Ant安装请参考官方安装指南,此处不再敖述。

Windows安装

  • 右键单击我的电脑,然后单击属性。
  • 在高级选项卡,单击环境变量
  • 增加XMLBEANS_HOME变量,其值是XMLBeans根目录的位置。例如:"C:\技术\xmlbeans\xmlbeans-2.5.0"。
  • 编辑 PATH变量,添加"%XMLBEANS_HOME%\ bin;"。
  • 编辑 CLASSPATH变量,包括使用XMLBeans包括xbean.jar。
  • 启动cmd,输入scomp -version会看到如下信息说明安装成功:
    Apache Software Foundation, org.apache.xmlbeans.XmlBeans version 2.5.0-r882429

Unix/Linux安装

  • export XMLBEANS_HOME=<location of XMLBeans root>
  • export PATH=$PATH:$XMLBEANS_HOME/bin
  • export CLASSPATH=$XMLBEANS_HOME/lib/xbean.jar:$CLASSPATH

    (or, if you built XMLBeans from source,export CLASSPATH=$XMLBEANS_HOME/build/lib/xbean.jar:$CLASSPATH)

  • For XMLBeans V2, export CLASSPATH=$CLASSPATH:$XMLBEANS_HOME/lib/jsr173[_1.0]_api.jar

    (or, if you built XMLBeans from source,export CLASSPATH=$CLASSPATH:$XMLBEANS_HOME/build/lib/jsr173[_1.0]_api.jar)

Your updates might look like this:

export XMLBEANS_HOME=/home/me/xmlbeans-2.1.0
export PATH=$PATH:$XMLBEANS_HOME/bin
export CLASSPATH=$XMLBEANS_HOME/lib/xbean.jar:$XMLBEANS_HOME/lib/jsr173_1.0_api.jar:$CLASSPATH

XmlBeans使用示例

  • 创建prefs.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 数据库控制台设置 -->
<prefs>
	<database>
		<connection name="db2" driver="com.ibm.db2.jcc.DB2Driver"
			url="jdbc:db2://localhost:50000/sample" user="sampl" password="sample"
			default="true" />
		<connection name="oracle" driver="oracle.jdbc.OracleDriver"
			url="jdbc:oracle:thin:@localhost:1521:orcl" user="orcl" password="orcl" />
	</database>
</prefs>
  • 使用Xml SPY(一款非常好用的Xml编辑器)生成对应的xsd,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="prefs">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="database"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="database">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="connection" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="connection">
		<xs:complexType>
			<xs:attribute name="user" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string"/>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="url" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string"/>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="password" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="name" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string" />
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="driver" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string" />
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="default" type="xs:boolean"/>
		</xs:complexType>
	</xs:element>
</xs:schema>
  • 创建xsdconfig文件,内容如下:
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">

  <xb:namespace>
    <xb:package>com.innofi.component.dbconsole</xb:package>
  </xb:namespace>

</xb:config>
  • 使用命令创建jar包:
scomp -out ./build/prefs.jar ./schemas/prefs.xsd ./schemas/prefs.xsdconfig
  • 将XmlBeans根目录下/lib下的jar包拷贝到项目中,编写测试类,内容如下:
package com.innofi.test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.xmlbeans.XmlException;

import com.innofi.component.dbconsole.ConnectionDocument.Connection;
import com.innofi.component.dbconsole.DatabaseDocument.Database;
import com.innofi.component.dbconsole.PrefsDocument;
import com.innofi.component.dbconsole.PrefsDocument.Prefs;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;

public class TestXmlBeans {
	
	public static List<Connection> read(String path) throws XmlException, IOException{
		PrefsDocument document = PrefsDocument.Factory.parse(new File(path));
		List <Connection> connnections = Arrays.asList(document.getPrefs().getDatabase().getConnectionArray()); 
		return connnections;
	}
	
	public static void write(PrefsDocument document , Connection connection){
		
	}
	
	
	public static void main(String args[]) throws IOException, XmlException{
		List<Connection> connections = read("C:/工作相关/产品研发/ProductResearch/develop_lib/dbconsole/WebContent/WEB-INF/prefs.xml");
		for(Connection connection : connections){
			System.out.println("name:["+connection.getName()+"]");
			System.out.println("default:["+connection.getDefault()+"]");
			System.out.println("url:["+connection.getUrl()+"]");
			System.out.println("driver:["+connection.getDriver()+"]");
			System.out.println("username:["+connection.getUser()+"]");
			System.out.println("password:["+connection.getPassword()+"]");
		}
		
		PrefsDocument doc = PrefsDocument.Factory.newInstance();
		Prefs prefs = doc.addNewPrefs();
		Database database = prefs.addNewDatabase();
		Connection connection = database.addNewConnection();
		connection.setDefault(true);
		connection.setDriver("driver");
		connection.setName("test");
		connection.setUser("user1");
		connection.setPassword("password");
		connection.setUrl("http://localhost");
		doc.save(new File("e:/test.xml"));
		
	}
	
}
  • 控制台输出信息:


name:[db2]
default:[true]
url:[jdbc:db2://localhost:50000/sample]
driver:[com.ibm.db2.jcc.DB2Driver]
username:[sampl]
password:[sample]
name:[oracle]
default:[false]
url:[jdbc:oracle:thin:@localhost:1521:orcl]
driver:[oracle.jdbc.OracleDriver]
username:[orcl]
password:[orcl]

  • e:/test.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<prefs>
 <database>
  <connection default="true" driver="driver" name="test"
   user="user1" password="password" url="http://localhost" />
 </database>
</prefs>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值