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=
  • 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 SPY(一款非常好用的Xml编辑器)生成对应的xsd,内容如下:


	
		
			
				
			
		
	
	
		
			
				
			
		
	
	
		
			
				
					
				
			
			
				
					
				
			
			
				
					
					
				
			
			
				
					
				
			
			
				
					
				
			
			
		
	

  • 创建xsdconfig文件,内容如下:


  
    com.innofi.component.dbconsole
  


  • 使用命令创建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 read(String path) throws XmlException, IOException{
		PrefsDocument document = PrefsDocument.Factory.parse(new File(path));
		List  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 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内容如下:


 
  
 

 

你可能感兴趣的:(java,xmlbeans)