快捷搜索:

使用XMLBeans绑定XML-java数据

本文示例源代码或素材下载

创建一个XMLBean

在开初创建XMLBeans之前,必要下载并在系统中安装Apache XMLBeans 1.02。当从XMLBeans 的归档文件中提掏出文件之后,将会在解压文件中看到bin目录和lib目录。随后,把bin目录放到路径中,把lib目录中的xbean.jar包放到classpath路径中。

XML 模式文件(XSD文件)创建了XMLBeans类。这些XMLBeans类能够解析所有相符XML模式的XML 实例文档。同样,经由过程应用这些XMLBeans类,也能够创建出实例文档。

例如,下面的weather_latlong.xsd模式列表描述了xml文档的内容,该文档包孕了某个地舆位置的气象、经纬度信息,这些信息整个基于zip代码。

接下来的步骤将天生一组XMLBeans类,它们表示上面的XSD类型模式。在事情目录(从示例归档文件提取文件的位置)的提示符中,输入以下敕令行:

scomp-outweather.jarweather_latlong.xsd

在编译完以上的模式后,XMLBeans天生如下五个接口。WeatherDocument、WeatherDocument$Weather、LatlongDocument、LatlongDocument$Latlong和ZipcodeAttribute。

在此,WeatherDocument接口表示文档元素,WeatherDocument$Weather接口表示全局元素Weather。类似地,LatlongDocument和LatlongDocument$Latlong接口表示全局元素Latlong。ZipcodeAttribute接口代表了全局属性Zipcode。

XMLBeans类

下面将具体评论争论XMLBeans类。 XMLBeans供给了46种java类型,反应了XML 模式规范中定义的46种内置类型。例如,W3C定义了一个xsd:string类型,XMLBeans就供给了一个XmlString数据类型与之对应。

在weather_latlong.xsd 模式创建的Weather接口为xsd:float类型的局部元素Visibility声清楚明了如下的两种措施:

floatgetVisibility();

org.apache.xmlbeans.XmlFloatxgetVisibility();

对付46种java类型中的任何一种,XMLBeans 都供给了两种造访数据的措施。在此,一种措施为xsd:float返回了XmlFloat类型,而另一种措施为xsd:float返回了一个通俗的java类型如float类型。

Xget形式的函数在机能上要优于get形式的函数,由于get形式的函数必须要把数据转化成为最相宜的java类型。

当模式被编译后,模式类型的名称将会变得相符java的命名规则。换句话说,stock-quote这样的名称将变为StockQuote。别的,模式名称空间的URIs变成了模式天生的XMLBeans类型的包名。假如包孕的模式没有声明目标名称空间,那么所有的java类都将放在noNamespace这个包中。当呈现了类命名冲突时,天生的类名字后面将加上响应的数字——例如, timeStamp3。

应用XMLBeans类解除封送XML文件

下面的一小段weather_unmarshal.java代码说明了如何应用XMLBeans类从weatherInput.xml.文件的XML文档中获取气象信息。

String filePath = "weatherInput.xml";

java.io.File inputXMLFile =

new java.io.File(filePath);

// Parse XML Document.

WeatherDocument weatherDoc =

WeatherDocument.Factory.parse(inputXMLFile);

// Get object reference of root element Weather.

WeatherDocument.Weather weatherElement =

weatherDoc.getWeather();

经由过程调用WeatherDocument.Factory.parse(File)措施来解析XML文件,该措施返回一个WeatherDocument工具。随后对weatherDocument工具调用getWeather()措施来获取根元素Weather的工具引用。

要得到Weather元素的内容,简单调用weatherElement的响应的get措施,它将直接映射模式定义的元素和属性名称:

// Call the appropriate 'get' methods of

// weatherElement that

// directly map to the element and attribute names

// defined in the schema.

Calendar timeStamp = weatherElement.getDatetime();

System.out.println("Weather details of zipcode "

+ weatherElement.getZipcode() + " at "

+ timeStamp);

System.out.println("Temperature is "

+ weatherElement.getTemperature());

System.out.println("Humidity is "

+ weatherElement.getHumidity());

System.out.println("Visibility is "

+ weatherElement.getVisibility());

为了得到输入XML文档的内容,我们先反省XmlObject.Factory.parse()返回的工具的文档类型,然后把返回的工具转化为响应的文档类型,以供稍后处置惩罚。另一段有趣的代码是着末的else代码块,它将处置惩罚款式优越的XML文档不相符weather_latlong.xsd模式的环境。

创建一个新的XML文档

下面的一小段latlong_marshal.java代码阐述了若何应用XMLBeans天生的类创建一个包孕经纬度信息的新xml实例文档。

LatlongDocument latLongDoc;

LatlongDocument.Latlong latLongElement;

XmlOptions xmlOptions;

// LatlongDocument.Factory.newInstance() creates

// and returns a LatlongDocument object.

latLongDoc= LatlongDocument.Factory.newInstance();

// addNewLatlong() method is called on the

// document object to create and add a new

// LatLong Element to document.

latLongElement = latLongDoc.addNewLatlong();

LatlongDocument.Factory.newInstance()创建了一个LatlongDocument工具并且返回该工具。随后对文档工具调用addNewLatlong()措施创建并向文档增添一个新的LatLong元素。

要向LatLong元素添加数据, 简单调用latLongElement的响应的Set措施即可,它将直接映射模式中定义的的元素和属性名称。

latLongElement.setZipcode("91023");

latLongElement.setLatitude("33.8792");

latLongElement.setLongitude("117.8974");

着末的代码段将LatLong元素确当前状态写到了标准的输出流中。

xmlOptions = new XmlOptions();

// Requests use of whitespace for easier reading

xmlOptions.setSavePrettyPrint();

// Requests that nested levels of the xml

// document to be indented by multiple of 4

// whitespace characters

xmlOptions.setSavePrettyPrintIndent(4);

String xmlStr = latLongDoc.xmlText(xmlOptions);

// Writes the current state of the LatLong

// element to a standard output stream

System.out.println("XML Instance Document is : "

+ "

" + xmlStr );

您可能还会对下面的文章感兴趣: