引用开源包:dom4j
jar包 :见附件
功能 :主要用于开发中常见的xml与javabean之间的数据互转,减少重复代码的编写,支持xml对应字段中的集合数据类型(只能为list)。但不支持
bean转换成xml时不指定字段所对应xml元素结点名称的情况,所有的字段必需指定生成xml时所对应的结点名称(即使想字段名就是xml结点属性名)。
example:
要转换成bean对象的xml文件
<?xml version='1.0' encoding='UTF-8'?>
<result resultCode="0" ses="5">
<dd>1212</dd>
<getDiskResult>
<nodeCount>43</nodeCount>
<contentList length="35">
<contentInfo>
<contentID>xb11RJTmc01109020111028015344009</contentID>
<contentName>1-1稻城风光.docx</contentName>
<contentList length="35">
<contentInfo>
<contentID>
xb11RJTmc01109020111028015344009
</contentID>
<contentName>1-2-11稻城风光.docx</contentName>
</contentInfo>
<contentInfo>
<contentID>
xb11RJTmc01109020111028015344010
</contentID>
<contentName>1-2-12稻城风光.docx</contentName>
</contentInfo>
</contentList>
</contentInfo>
<contentInfo>
<contentID>xb11RJTmc01109020111028015344009</contentID>
<contentName>2-1稻城风光.docx</contentName>
<contentList length="35">
<contentInfo>
<contentID>
xb11RJTmc01109020111028015344009
</contentID>
<contentName>2-2-11稻城风光.docx</contentName>
</contentInfo>
<contentInfo>
<contentID>
xb11RJTmc01109020111028015344010
</contentID>
<contentName>2-2-12稻城风光.docx</contentName>
</contentInfo>
</contentList>
</contentInfo>
</contentList>
</getDiskResult>
</result>
java实体bean对象(一定要提供get set方法)
Content.java
public class Content {
@AttributeAnnotation(attribute = "resultCode")
@ElementAnnotation(xmlElement = "result")
private String resultCode;
@ElementAnnotation(xmlElement = "nodeCount")
private String nodeCount;
@ElementAnnotation(xmlElement = "contentList")
@CollectionAnnotation(beanClass = ContentInfo.class, childElement = "contentInfo")
private List<ContentInfo> contentList;
@AttributeAnnotation(attribute = "length")
@ElementAnnotation(xmlElement = "contentList")
private String length;
@ElementAnnotation(xmlElement = "dd")
private String dd;
@AttributeAnnotation(attribute = "ses")
@ElementAnnotation(xmlElement = "result")
private String other;
public String getResultCode() {
return resultCode;
}
public void setResultCode(String resultCode) {
this.resultCode = resultCode;
}
public String getNodeCount() {
return nodeCount;
}
public void setNodeCount(String nodeCount) {
this.nodeCount = nodeCount;
}
public List<ContentInfo> getContentList() {
return contentList;
}
public void setContentList(List<ContentInfo> contentList) {
this.contentList = contentList;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
public String getDd() {
return dd;
}
public void setDd(String dd) {
this.dd = dd;
}
public String getOther() {
return other;
}
public void setOther(String other) {
this.other = other;
}
@Override
public String toString() {
return "dd:" + this.dd + " other:" + this.other + " nodeCount:"
+ this.nodeCount + " resultCode:" + this.resultCode
+ " length:" + this.length + " contentList:" + this.contentList;
}
}
ContentInfo.java
public class ContentInfo {
@ElementAnnotation(xmlElement = "contentID")
private String id;
@ElementAnnotation(xmlElement = "contentName")
private String name;
@ElementAnnotation(xmlElement = "contentList")
@CollectionAnnotation(beanClass = ContentInfoChild.class, childElement = "contentInfo")
private List<ContentInfo> contentList;
@AttributeAnnotation(attribute = "length")
@ElementAnnotation(xmlElement = "contentList")
private String length;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<ContentInfo> getContentList() {
return contentList;
}
public void setContentList(List<ContentInfo> contentList) {
this.contentList = contentList;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:" + this.id + " name:" + this.name + " length:"
+ this.length + " contentList:" + this.contentList;
}
}
ContentInfoChild.java
public class ContentInfoChild {
@ElementAnnotation(xmlElement = "contentID")
private String id;
@ElementAnnotation(xmlElement = "contentName")
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:" + this.id + " name:" + this.name;
}
}
测试MyTest.java类
public class MyTest {
public static void main(String[] args){
InputStream in = MyAnalyMain.class.getClassLoader().getResourceAsStream("ce.xml");
Content content = null;
Long begin = System.currentTimeMillis();
XmlToBeanAnaly analy = new XmlToBeanAnaly(); //xml转换成实现bean的
analy.setClass(Content.class); //设置要转换成xml的bean的class信息
analy.initBeanFields(); //初使化字段数据
//bean转换成xml文件
BeanToXmlAnaly toXml = new BeanToXmlAnaly();
toXml.setEncodeing("utf-8", "root");
try {
toXml.setSchema("your scheama path", "public url");
//Content content = analy.xmlToBean(in,Content.class); //当没有调用 setClass()与initBeanFields()方法时可调用此方法
content = analy.xmlToBean(in); //将xml转换成bean
System.out.println(content);
Long end = System.currentTimeMillis();
System.out.println("执行耗时:"+(end - begin));
//bean转换成xml文件
String xml = toXml.beanToXmlString(content);
System.out.println(xml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
System.out.println(content);
System.out.println("执行耗时:"+(end - begin));
dd:1212 other:5 nodeCount:43 resultCode:0 length:35 contentList:[id:xb11RJTmc01109020111028015344009 name:1-1稻城风光.docx length:35 contentList:[id:xb11RJTmc01109020111028015344009 name:1-2-11稻城风光.docx, id:xb11RJTmc01109020111028015344010 name:1-2-12稻城风光.docx], id:xb11RJTmc01109020111028015344009 name:2-1稻城风光.docx length:35 contentList:[id:xb11RJTmc01109020111028015344009 name:2-2-11稻城风光.docx, id:xb11RJTmc01109020111028015344010 name:2-2-12稻城风光.docx]]
执行耗时:101
System.out.println(xml);
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root PUBLIC "public url " "your scheama path">
<root>
<dd>1212</dd>
<contentList length="35">
<contentInfo>
<contentList length="35">
<contentInfo>
<contentName>1-2-11稻城风光.docx</contentName>
<contentID>
xb11RJTmc01109020111028015344009
</contentID>
</contentInfo>
<contentInfo>
<contentName>1-2-12稻城风光.docx</contentName>
<contentID>
xb11RJTmc01109020111028015344010
</contentID>
</contentInfo>
</contentList>
<contentName>1-1稻城风光.docx</contentName>
<contentID>xb11RJTmc01109020111028015344009</contentID>
</contentInfo>
<contentInfo>
<contentList length="35">
<contentInfo>
<contentName>2-2-11稻城风光.docx</contentName>
<contentID>
xb11RJTmc01109020111028015344009
</contentID>
</contentInfo>
<contentInfo>
<contentName>2-2-12稻城风光.docx</contentName>
<contentID>
xb11RJTmc01109020111028015344010
</contentID>
</contentInfo>
</contentList>
<contentName>2-1稻城风光.docx</contentName>
<contentID>xb11RJTmc01109020111028015344009</contentID>
</contentInfo>
</contentList>
<nodeCount>43</nodeCount>
</root>
ps:附件己重新更新,用法和文章介绍差不多。只是注解里的属性名有所更改,同时修正了几处bug。同时添加了根据bean中的字段类型自动转换数据(现只支持String ,Boolean,Double,Float等常用类型),当字段与xml结点或属性名相同时默认不用指定名称。
源码为src
分享到:
相关推荐
xml与JavaBean互相转换的好工具---Xstream,能够很方便的实现xml与JavaBean之间的转换,这在系统之间进行信息交互是非常方便的
用JOX实现xml和javabean的相互转换
XML和JavaBean相互转化是一个非常有用的工作,用来读写xml的组件很多,比如dom4j, sax, JDom,Digester等,但是很多组件用起来很麻烦,今天给大家推荐一个超级简单的组件JOX, JOX是一套用户XML document和Java ...
用jox对xml与javabean进行转换,对过调用工具类BeanXmlMapping的fromXml()与toXml()方法进行相互转换。
实现javabean转换xml,以及xml转换javabean,,尤其是做数据对接时,使用webservice时,很方便
xml与javabean之间的相互转换,很方便,可快速入门,导入MyEclipse即可使用
xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...
作为备忘录,实现xml转换成xsd,然后由xsd转换到javabean,最后在xml和javabean之间互相转换。 说明网址:http://blog.csdn.net/beanjoy/article/details/38272051
xml与json、javabean的互相转换
XStream示例代码,JavaBean与XML,JSON之间互相转换(包含完整jar包)jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar
jox是一组java类库 实现javaBean与xml相互转化 更加容易
在开发过程中JavaBean与xml之间相互转换,jox给我们提供了很好的方便,但是jox官网已关闭,所以在这里方便大家下载使用;此资源中包含了jox所有依赖的jar包;解决xml中文格式化问题,JOXBeanOutputStream joxOut = ...
NULL 博文链接:https://inotgaoshou.iteye.com/blog/1130234
xml和bean之间的相互转换源码,xml和bean之间的相互转换源码
java中通过xml文件自动生成javaBean,免除手写的痛苦,以及java与xml之间的相互转化
NULL 博文链接:https://defrag-sly.iteye.com/blog/903650
本资料用于JavaBean和XML之间相互转换,所用到的关于betwixt的包都在内。方法写在textXml中,由于默认的方法较为简单,且有局限性,所以本资料主要侧重从自定义的配置文件中转换xml或者生成javaBean.有兴趣的朋友...