XML转换成JavaBean 10

截图如下:... 截图如下: 展开
 我来答
书飞凝683
2016-05-17 · TA获得超过1518个赞
知道大有可为答主
回答量:2250
采纳率:83%
帮助的人:472万
展开全部
用Dom4j和SAX解析配置文件成java Bean对象
分类: java 2011-08-05 11:13 138人阅读 评论(0) 收藏 举报
[java] view plaincopy
用Dom4j和SAX两种方式将如下配置文件解析成java Bean对象。配置文件(config.xml)如下:<pre class="html" name="code"><?xml version="1.0" encoding="UTF-8"?>
<Beans>
<Bean className="Test" classComment="测试类">
<Field name="name" type="String" comment="名字" />
<Field name="sex" type="Integer" comment="性别" />
</Bean>
<Bean className="Test1" classComment="测试类1">
<Field name="name1" type="String" comment="名字1" />
<Field name="sex1" type="Integer" comment="性别1" />
</Bean>
</Beans>

[java] view plaincopy
首先定义java的三个类Beans、Bean、Field 来承载配置文件的节点,类定义如下:
[java] view plaincopy
/**
* 总对象
* @author
*/
public class Beans {

private ArrayList<Bean> listBean = new ArrayList<Bean>();;

public ArrayList<Bean> getListBean() {
return listBean;
}

public void setListBean(ArrayList<Bean> listBean) {
this.listBean = listBean;
}

}

/**
* 一个Class Bean
* @author
*
*/
public class Bean {

private String className;//类名
private String classComment;//类注释
private ArrayList<Field> listField = new ArrayList<Field>();

public String getClassName() {
return className;
}

public void setClassName(String className) {
this.className = className;
}

public String getClassComment() {
return classComment;
}

public void setClassComment(String classComment) {
this.classComment = classComment;
}

public ArrayList<Field> getListField() {
return listField;
}

public void setListField(ArrayList<Field> listField) {
this.listField = listField;
}

}

/**
* Bean 中的属性对象
* @author
*
*/
public class Field {
//类型
private String type;
//字段名字
private String name;
//字段注释
private String comment;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}

}

第一种方式:通过Dom4j的方式解析xml文件:
[java] view plaincopy

[java] view plaincopy
/**
* 将xml格式的字符串转成Beans对象
* @param xml
* @return
*/
public static Beans parseXml(String xml)
{
Beans returnObj = new Beans();
Document doc = null;
try{
// doc = DocumentHelper.parseText(xml); 原版转的是用的这种方式获取document对象,但是测试出错。自己换成了下面方式获取document对象就对了。
SAXReader reader = new SAXReader();

doc = reader.read(new File(xml));
Element root = doc.getRootElement();
//obj list
List list_el = root.elements();
if(list_el !=null && list_el.size()>0)
{
for(int i =0;i<list_el.size();i++)
{

Element obj_el = (Element) list_el.get(i);
//解析obj 节点
Bean obj = parseObj(obj_el);
returnObj.getListBean().add(obj);
}
}
}catch(Exception e){
e.printStackTrace();
}

return returnObj;

}

/**
* 解析Bean节点
* @param obj_el
* @return
*/
private static Bean parseObj(Element obj_el)
{
Bean obj = new Bean();
obj.setClassName(obj_el.attributeValue("className"));
obj.setClassComment(obj_el.attributeValue("classComment"));
//获取field 列表
List list_field = obj_el.elements();
if(list_field != null && list_field.size() > 0)
{
for(int i = 0;i<list_field.size();i++)
{
Element field_el = (Element)list_field.get(i);
//解析field节点
Field field = parseField(field_el);
obj.getListField().add(field);
}
}
return obj;
}

/**
* 解析Field属性
* @param field_el
* @return
*/
private static Field parseField(Element field_el)
{
Field field = new Field();
List list_attr = field_el.attributes();
if(list_attr != null && list_attr.size() > 0)
{
for(int i=0;i<list_attr.size();i++)
{
Attribute field_attr = (Attribute)list_attr.get(i);
String key = field_attr.getName();
String value = field_attr.getText();
if(key.equals("name"))
{
field.setName(value);
}
else if(key.equals("type"))
{
field.setType(value);
}
else if(key.equals("comment"))
{
field.setComment(value);
}

}
}
return field;
}
追问
我用的是JAXB,然后我贴的代码中XSD里面有个Alarms下面有Alarm可是我的XML中没有Alarm我想怎么能够让JavaBean的对应关系中对这个Alarms进行忽略(或者能够XML中有没有都可以),要不然我在获取Alarm的时候如果没有Alarms就会报空指针错
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式