首先要用Altova XMLSpy软件生成一个.xsd的文件,具体做法如下:
因为在项目开发很多地方需要用到xsd文件做模板转换对应java实体对象,所以我们有必要知道如何通过xmlspy这个非常方便的工具进行xml的转换工作。
点击“File”-“New”系统会弹出“create new document”的窗口,此时选择“xml XML document”点击“ok”,并选择“Schema”单选框。粘贴你的样本xml。
样板xml内容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<datas>
<data>
<storageDate>String</storageDate>
<goodsName>String</goodsName>
<passNo>String</passNo>
<spec>String</spec>
<form>String</form>
<goodsManu>String</goodsManu>
<prodLot>String</prodLot>
<prodDate>String</prodDate>
<validateDate>String</validateDate>
<count>String</count>
<unitName>String</unitName>
<storeName>String</storeName>
</data>
<data>
<storageDate>String</storageDate>
<goodsName>String</goodsName>
<passNo>String</passNo>
<spec>String</spec>
<form>String</form>
<goodsManu>String</goodsManu>
<prodLot>String</prodLot>
<prodDate>String</prodDate>
<validateDate>String</validateDate>
<count>String</count>
<unitName>String</unitName>
<storeName>String</storeName>
</data>
</datas>
此时,点击“DTD/Schema”-“Generate DTD/Schema”,选择“W3C Schema”其他选项如下图所示:
点击“ok”,就完成了xsd文件的生成。
-------------------------------------------------------
下面开始将.xsd的文件转化成对象,具体方法如下:
到jaxb网站上下载Jaxb的最新安装包,如JAXB -2_1_9.解压后含有jaxb_ri.
我将生成的.xsd文件和jaxb-ri(工具文件,附件中提供)文件拷到了E盘下(方面操作),然后在cmd中运行如下命令:
E: 回车
cd jaxb-ri回车
cd bin回车
xjc -d f:Workspace\sNewWorkspace\JaxbProject\src -p com.lf e:\person.xsd回车
-d表示生成文件的目录
-p表示java类所在的包路径
e:\person.xsd表示.xsd文件所在的路径
就可以生成相应的JavaBean实体类了。
下面即使使用实体类了:
JAXBContext jc;
try {
jc = JAXBContext.newInstance("com.lf");
Unmarshaller u = jc.createUnmarshaller();
InputStream in;
in = new FileInputStream("src\\person.xml");
Persons persons = (Persons) u.unmarshal(in);
in.close();
List<Person> personList = persons.getPerson();
for (int i = 0; i < personList.size(); i++) {
Person person=personList.get(i);
System.out.println("personName:"+person.getName());
}
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
嗯 一切ok了