APP下载

Java解析XML的一种数据绑定技术

2012-01-15刘平

电子设计工程 2012年15期
关键词:跨平台代码可视化

刘平

(西安财经学院 信息与教育技术中心,陕西 西安 710061)

在跨平台的Web技术应用中,XML[1]技术占据着非常重要的地位,如不同系统之间的数据交互,同一系统各模块之间实现松耦合[2],如果没有XML技术的支持,要做好软件技术开发是很难想象的。对于应用层软件开发人员来讲,遇到的主要技术困难就是跨平台,因为他们所用的开发平台大都各自成为完整的体系,而且系统大都集成了各种插件。下面通过处理 “学生基本信息”这一实例系统地论述跨平台地XML与Java绑定技术和方法。

1 创建图形化的XSM文件

根据对学生基本信息的分析,可以建立描述学生基本信息的可视化XSM文件,如图1所示。

2 创建XSD文件

接下来将XSM图形文件转换成XSD[3](XML Schema)模板文件,名为:XMLStudents.XSD,转换后的内容如下:

3 将XSD文件的各元素与Java类绑定

下一步根据XMLStudents.XSD文件的内容,创建相应的Java类[4]:XmlStudents.Java、XMLStudent.java 和 XmlStudentType.java文件,实现解析功能主要代码分别如下:

1)XmlStudents.Java

该文件中主要创建对整个XML文件的元素节点操作的类,以及操作每个元素节点的增删方法和读存节点数据值的方法,需要引进的类如下:

java.io.*,import java.util*,org.exolab.castor.xml.*,import org.xml.sax.ContentHandler;

/********创建XmlStudents类主要代码***********/

public class XmlStudents implements java.io.Serializable{

private java.util.Vector_XMLStudentList;

public XmlStudents() {super(); _XMLStudentList=new Vector();}//构造方法

//--添加节点方法

public void addXMLStudent(xsd.XMLStudent vXMLStudent)

throws java.lang.IndexOutOfBoundsException

{

_XMLStudentList.addElement(vXMLStudent);

}

public void addXMLStudent (int index, xsd.XMLStudent vXMLStudent)

throws java.lang.IndexOutOfBoundsException

{

_XMLStudentList.insertElementAt(vXMLStudent, index);

}

public java.util.Enumeration enumerateXMLStudent()

{

return_XMLStudentList.elements();

}

//--获取节点方法

public xsd.XMLStudent getXMLStudent(int index)

throws java.lang.IndexOutOfBoundsException

{

//--测试绑定索引

if((index<0) ||(index>_XMLStudentList.size())) {

throw new IndexOutOfBoundsException();

}

return (xsd.XMLStudent) _XMLStudentList.elementAt(index);

}

下面是该类实现的一组节点存取数据、删除数据和验证点数据的方法,将整个XML文件转化成要解析的对象,从中读取各节点[5]的数据,对XML文件进行读写操作(省略方法内容):getXMLStudent (),getXML-StudentCount (),isValid(,marshal (java.io.Writer,setXMLStudent (int, xsd.XMLStudent),setXMLStudent (xsd.XMLStudent,unmar-shal (Reader reader),unmarshalReader),validate(),marshal(org.xml.sax.ContentHandler handler),marshal(org.xml.sax.ContentHandler),removeAllXML Student(),removeXMLStudent(int).

}

2)XMLStudent.Java

该文件主要创建针对每一个XMLStudent节点进行具体操作的类。需要引进的类如下:

java.io.*,import java.util*,org.exolab.castor.xml.*,import org.xml.sax.ContentHandler;

/*******创建XmlStudent类主要代码*************/

public class XMLStudent extends XmlStudentType implements java.io.Serializable

{

public XMLStudent() {

super();

//--验证合法性

public boolean isValid()

{

try{

validate();

}

catch (ValidationException vex) {

return false;

}

return true;

}

/*********将节点对象写入XML文件中********/

public void marshal(java.io.Writer[6]out)

Throws MarshalException,ValidationException

{

Marshaller.marshal(this, out);

} public void marshal(org.xml.sax.ContentHandler handler)

Throws IOException,MarshalException,Validation Exception

{

Marshaller.marshal(this, handler);

}

/*******从XML文件中读取节点对象************/

public static java.lang.Object unmarshal(java.io.Reader reader)

throwsMarshalException,ValidationException

{

return (xsd.XMLStudent) Unmarshaller.unmarshal(xsd.XML Student.class, reader);

}

//--void validate()

public void validate()

throws org.exolab.castor.xml.ValidationException

{

org.exolab.castor.xml.Validatorvalidator= new Validator();

validator.validate(this);

}}

3)XmlStudentType.java

该文件主要创建对每个XmlStudent节点的子节点的数据解析类,需要引进的类如下:

java.io.*,import java.util*,org.exolab.castor.xml.*,import org.xml.sax.ContentHandler;

/**********创建XmlStudentType类主要代码*******************/

public class XmlStudentType implements java.io.Serializable{

private int_ID;

private boolean_has_ID;

private java.lang.String_identify;

private java.lang.String_name;

private java.lang.String_sex;

private java.lang.String_birthday;

private java.lang.String_address;

private java.lang.String_telephone;

private java.lang.String_mem;

//--构造方法

public XmlStudentType() {

super();

}

public void deleteID()

{

this._has_ID=false;

}//--void deleteID()

/**************相应每一个属性的一对setXxx/getXxx方法,这里略写*******/

...............................................

//--验证合法性

public boolean isValid()

{

try{

validate();

}

catch (ValidationException vex) {

return false;

}

return true;

}

//写数据

public void marshal(java.io.Writer out)

Throws MarshalException,ValidationException

{

Marshaller.marshal(this, out);

}

public void marshal(ContentHandler handler)

throws IOException,MarshalException,Validation Exception

{

Marshaller.marshal(this, handler);

}

//--读数据

public static java.lang.Object unmarshal(java.io.Reader reader)

Throws MarshalException,ValidationException

{

return (xsd.XmlStudentType) Unmarshaller.unmarshal(xsd.XmlStudentType.class, reader);

}

public void validate()

throws ValidationException

{

org.exolab.castor.xml.Validator validator=new Validator();

validator.validate(this);

}//--void validate()

}

4 创建可视化界面测试程序

创建可视化界面类,如图2所示,将有关学生信息输入该界面,然后提交给上面有关的类,即可实现测试。

5 结束语

根据以上代码的实践,笔者将XML与Java程序代码完整地绑定在一起,为跨平台地数据交互提供了很大地方便,并为开发人员提供了XML文件解析的另一中有效途径。

[1]郝俊寿.XML程序设计案例教程[M].北京:机械工业出版社,2012.

[2]徐宏喆.实用软件设计模式教程[M].北京:清华大学出版社,2010.

[3]杨少波.J2EE Web核心技术-XHTML与XML应用开发[M].北京:清华大学出版社,2011.

[4]陈烨.JBuilder7编程实作指南[M].北京:北京希望电子出版社,2003.

[5]Brett D.Mclaugblin.Java与XML[M].江文,译.北京:中国电力出版社,2011.

[6]吴亚峰.Java se 6.0.[M].北京:人民邮电出版社,2007.

猜你喜欢

跨平台代码可视化
基于CiteSpace的足三里穴研究可视化分析
思维可视化
基于CGAL和OpenGL的海底地形三维可视化
“融评”:党媒评论的可视化创新
跨平台APEX接口组件的设计与实现
创世代码
创世代码
创世代码
创世代码
基于QT的跨平台输电铁塔监控终端软件设计与实现