我使用Castor的心得(二)

上文中我们已经给大家介绍了,如何使用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的官方网站。

你可能感兴趣的:(java,xml,String,null,Class,encoding)