上文中我们已经给大家介绍了,如何使用Castor,根据我们制定的XSD生成相应的Java文件。
现在我们再来一起看看,如何使用这些生成的Java类来操作满足XSD格式的XML文件。
这里我们首先创建一个范例xml文件,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:/software/eclipse-SDK-3.2.1-win32/eclipse/workspace/TestCastor/test.xsd">
<time>20090903</time>
<place>China</place>
<role>student</role>
<events>
<event>
<key>0</key>
<description>study</description>
</event>
<event>
<key>1</key>
<description>play</description>
</event>
</events>
</Test>
处理该XML文件的程序如下:
package com.test.castor.impl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.ValidationException;
import com.test.castor.code.EventsItem;
import com.test.castor.code.Test;
public class TestCastor {
/**
* @param args
*/
public static void main(String[] args) {
try {
Test t = TestCastor.parse("test.xml");
System.out.println("时间: " + t.getTime());
System.out.println("地点: " +t.getPlace());
System.out.println("人物: " +t.getRole());
System.out.println("事件: ");
for(EventsItem e : t.getEvents().getEventsItem()){
System.out.println("Key=" + e.getEvent().getKey() + ", Value="+e.getEvent().getDescription());
}
} catch (MarshalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ValidationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Test parse(String filename) throws FileNotFoundException, MarshalException, ValidationException{
FileReader xmlfile = null;
FileInputStream istream = null;
xmlfile = new FileReader(filename);
Test t = (Test)Test.unmarshal(xmlfile);
if(t.isValid()){
return t;
}else{
return null;
}
}
}
可以看到,在parse方法中,只通过Test类的unmarshal方法就可以使用XML文件中的内容来构造一个Test对象。
通过该Test类对象,我们就可以获取到并使用XML文件中的内容了。
上面这段程序的运行结果如下:
时间: 20090903
地点: China
人物: student
事件:
Key=0, Value=study
Key=1, Value=play
当然,我们也可以通过Test对象来构造XML文件。
这里只需要在构造Test对象之后,调用Test对象的marshal方法,传入一个Writer对象,就可以把Test对象的内容输出到一个XML文件当中。
以上就是本人对于Castor的一点心得,Castor是很强大的,还有很多其他的功能,
如果大家感兴趣,请参考Castor的官方网站。