劉平
(西安財經(jīng)學(xué)院 信息與教育技術(shù)中心,陜西 西安 710061)
在跨平臺的Web技術(shù)應(yīng)用中,XML[1]技術(shù)占據(jù)著非常重要的地位,如不同系統(tǒng)之間的數(shù)據(jù)交互,同一系統(tǒng)各模塊之間實現(xiàn)松耦合[2],如果沒有XML技術(shù)的支持,要做好軟件技術(shù)開發(fā)是很難想象的。對于應(yīng)用層軟件開發(fā)人員來講,遇到的主要技術(shù)困難就是跨平臺,因為他們所用的開發(fā)平臺大都各自成為完整的體系,而且系統(tǒng)大都集成了各種插件。下面通過處理 “學(xué)生基本信息”這一實例系統(tǒng)地論述跨平臺地XML與Java綁定技術(shù)和方法。
根據(jù)對學(xué)生基本信息的分析,可以建立描述學(xué)生基本信息的可視化XSM文件,如圖1所示。
接下來將XSM圖形文件轉(zhuǎn)換成XSD[3](XML Schema)模板文件,名為:XMLStudents.XSD,轉(zhuǎn)換后的內(nèi)容如下:
下一步根據(jù)XMLStudents.XSD文件的內(nèi)容,創(chuàng)建相應(yīng)的Java類[4]:XmlStudents.Java、XMLStudent.java 和 XmlStudentType.java文件,實現(xiàn)解析功能主要代碼分別如下:
1)XmlStudents.Java
該文件中主要創(chuàng)建對整個XML文件的元素節(jié)點操作的類,以及操作每個元素節(jié)點的增刪方法和讀存節(jié)點數(shù)據(jù)值的方法,需要引進(jìn)的類如下:
java.io.*,import java.util*,org.exolab.castor.xml.*,import org.xml.sax.ContentHandler;
/********創(chuàng)建XmlStudents類主要代碼***********/
public class XmlStudents implements java.io.Serializable{
private java.util.Vector_XMLStudentList;
public XmlStudents() {super(); _XMLStudentList=new Vector();}//構(gòu)造方法
//--添加節(jié)點方法
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();
}
//--獲取節(jié)點方法
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);
}
下面是該類實現(xiàn)的一組節(jié)點存取數(shù)據(jù)、刪除數(shù)據(jù)和驗證點數(shù)據(jù)的方法,將整個XML文件轉(zhuǎn)化成要解析的對象,從中讀取各節(jié)點[5]的數(shù)據(jù),對XML文件進(jìn)行讀寫操作(省略方法內(nèi)容):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
該文件主要創(chuàng)建針對每一個XMLStudent節(jié)點進(jìn)行具體操作的類。需要引進(jìn)的類如下:
java.io.*,import java.util*,org.exolab.castor.xml.*,import org.xml.sax.ContentHandler;
/*******創(chuàng)建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;
}
/*********將節(jié)點對象寫入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文件中讀取節(jié)點對象************/
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
該文件主要創(chuàng)建對每個XmlStudent節(jié)點的子節(jié)點的數(shù)據(jù)解析類,需要引進(jìn)的類如下:
java.io.*,import java.util*,org.exolab.castor.xml.*,import org.xml.sax.ContentHandler;
/**********創(chuàng)建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;
//--構(gòu)造方法
public XmlStudentType() {
super();
}
public void deleteID()
{
this._has_ID=false;
}//--void deleteID()
/**************相應(yīng)每一個屬性的一對setXxx/getXxx方法,這里略寫*******/
...............................................
//--驗證合法性
public boolean isValid()
{
try{
validate();
}
catch (ValidationException vex) {
return false;
}
return true;
}
//寫數(shù)據(jù)
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);
}
//--讀數(shù)據(jù)
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()
}
創(chuàng)建可視化界面類,如圖2所示,將有關(guān)學(xué)生信息輸入該界面,然后提交給上面有關(guān)的類,即可實現(xiàn)測試。
根據(jù)以上代碼的實踐,筆者將XML與Java程序代碼完整地綁定在一起,為跨平臺地數(shù)據(jù)交互提供了很大地方便,并為開發(fā)人員提供了XML文件解析的另一中有效途徑。
[1]郝俊壽.XML程序設(shè)計案例教程[M].北京:機(jī)械工業(yè)出版社,2012.
[2]徐宏喆.實用軟件設(shè)計模式教程[M].北京:清華大學(xué)出版社,2010.
[3]楊少波.J2EE Web核心技術(shù)-XHTML與XML應(yīng)用開發(fā)[M].北京:清華大學(xué)出版社,2011.
[4]陳燁.JBuilder7編程實作指南[M].北京:北京希望電子出版社,2003.
[5]Brett D.Mclaugblin.Java與XML[M].江文,譯.北京:中國電力出版社,2011.
[6]吳亞峰.Java se 6.0.[M].北京:人民郵電出版社,2007.