castor解析Xml
来源:互联网 发布:淘宝女人针织衫 编辑:程序博客网 时间:2024/06/10 08:09
前言: 今天,我们来看一下一个解析xml的工具Castor,这个工具是公司的项目所用到的,用来解析xml报文。此前我所接触的解析xml的方式有Dom,Dom4j,Sax。而Castor工具应该是对Sax解析进行了封装(个人猜测,还未看源码,这个问题的正确性以后再确定)。在看公司的项目时,觉得自己对这些工具并不重视,想着晚上回来自己写个简单的Castor引用的简单demo,这个看似简单,但是在写的过程中遇到了不少困难。
首先,导包的问题,刚开始一直报错:
Java.lang.ClassNotFoundException:org.apache.xerces.parsers.SAXParser
刚开始研究了一会,不知道是什么问题,还以为是路径不对,因为用castor工具时需要导入commens-logging包 。一直有日志info level打出
/F:/WorkSpace/MyCastorTest/bin is not a URL, trying to convert it to a file URL
自己也是有些过于浮躁了,调试的时候明明就是info ,而不是error。还一味的以为是URL的错误。却忽略了后面的异常。很蠢吧,哎,犯这种低级错误真的对自己很无语,千万不能浮躁,慢慢的找问题,要不然会花更多的时间。折腾了一会后,才拿着异常信息百度寻找答案。后来才发现是缺少一个包:
因为xercesImpl.jar的缺失,导致了程序无法正常运行,这个包在网上可以轻易下到。
下面给出castor包的下载地址:
castor.jar
这个包笔者还是找了一段时间的,CSDN上该资源大多需要积分。
好了,下面正式给出代码:
先写两个实体类
package wangcc.entity;public class User { private Integer id; private String name; private double salary; private Address address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "name" + "[" + name + "]" + "salary" + "[" + salary + "]" + "Address:" + address.toString(); };}
package wangcc.entity;public class Address {private String province;private String city;private String country; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String toString() { return "["+province+"_"+city+"_"+country+"]"; };}
这是User.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd"><mapping><class name="wangcc.entity.User"><map-to xml="User"/><field name="id" type="integer"></field><field name="name" type="string"></field><field name="salary" type="double"></field><field name="address" type="wangcc.entity.Address"><bind-xml name="Address"></bind-xml></field></class></mapping>
test.xml
<User><id>24</id><name>kobe</name><salary>20000000.4</salary><Address><province>Calin</province><city>Los Angeles</city><country>Stea</country></Address></User>
package wangcc.castor;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.Reader;import java.io.Writer;import org.exolab.castor.mapping.Mapping;import org.exolab.castor.xml.Marshaller;import org.exolab.castor.xml.Unmarshaller;import org.junit.Test;import wangcc.entity.Address;import wangcc.entity.User;public class TestCastor { public static void main(String[] args) throws Exception { } @Test public void testToBean() throws Exception { String mappingPath = TestCastor.class.getClassLoader() .getResource("User.xml").getFile(); // String mappingPath = "F:\\TestCastor\\User.xml"; String xmlPath = TestCastor.class.getClassLoader() .getResource("test.xml").getFile(); Mapping mapping = new Mapping(); // mapping相当于一个规定,一种标准,你的xml必须是符合这个xml文件标准的 mapping.loadMapping(mappingPath); System.out.println(mappingPath); Unmarshaller um = new Unmarshaller(mapping); // String str = // "<User><id>23</id><name>james</name><salary>2000000.4</salary><Address><province>kelifulan</province><city>akelong</city><country>LeBorn</country></Address></User>"; // // Reader reader = new StringReader(str); Reader reader = new FileReader(xmlPath); User user = (User) um.unmarshal(reader); System.out.println(user); } @Test public void testToXml() throws Exception { User user = new User(); user.setId(23); user.setName("james"); user.setSalary(2000000.4); Address address = new Address(); address.setProvince("kelifulan"); address.setCity("akelong"); address.setCountry("LeBorn"); user.setAddress(address); Mapping mapping = new Mapping(); String mapppingPath = TestCastor.class.getClassLoader() .getResource("User.xml").getFile(); mapping.loadMapping(mapppingPath); String file = "F:\\TestCastor\\data.xml"; Writer fileWriter = new FileWriter(file); // Writer writer = new StringWriter(); // Marshaller msa = new Marshaller(writer); // msa.setEncoding("UTF-8"); // msa.setMapping(mapping); // msa.marshal(user); // String returnXml = writer.toString(); // System.out.println(returnXml); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); Marshaller msa = new Marshaller(fileWriter); msa.setEncoding("UTF-8"); msa.setMapping(mapping); msa.marshal(user); }}
0 0
- castor xml解析
- castor解析Xml
- Castor-解析xml的另外一种方法
- Castor XML
- Castor XML
- castor解析
- Castor学习笔记一 -- 使用Castor XML
- 使用Castor XML
- 使用Castor XML
- 用Castor 处理XML文档
- 用Castor 处理XML文档
- 用Castor处理XML文档
- 用Castor 处理XML文档
- Castor学习笔记一 -- 使用Castor XML收藏
- castor
- castor
- castor
- castor
- 第20天 FileInputStream、FileOutStream、异常、输入输出字节流、缓冲输入输出字节流
- 欧拉计划 13
- CH9,p176,练习
- 树梅派应用25:宅男必备:配备电子纸屏幕的抽纸盒
- 2016.12.19 今天最大的收获就是
- castor解析Xml
- 【GoLang】panic defer recover 深入理解
- Java 中 int 转 char
- 招聘简章
- python操作excel
- 文章标题
- ExtJs菜单工具栏综合实例
- leetcode--Implement Queue using Stacks
- 还是几道简答题