之前发了一篇博文《xml和实体对象相互转换 一步到位 》,在项目实际应用过程中我遇到了这种xml格式:
<?xml version="1.0" encoding="UTF-8"?> <html> <body> <div id="div1" name="div">123</div> <form action="saveForm.asp" method="post"> <h1>请输入您的联系信息:</h1> <lable>名字:</lable> <p> <input type="submit" id="btn_sub" name="btn_sub" value="Submit"/> <input type="reset" id="btn_res" name="btn_res" value="Reset"/> </p> </form> </body> </html>
原来我举例用的是以下xml文件:
<?xml version="1.0" encoding="UTF-8"?> <html> <body> <div id="div1" name="div"/> <form action="saveForm.asp" method="post"> <h1>请输入您的联系信息:</h1> <lable>名字:</lable> <p> <input type="submit" id="btn_sub" name="btn_sub" value="Submit"/> <input type="reset" id="btn_res" name="btn_res" value="Reset"/> </p> </form> </body> </html>
两个xml的区别是:
<div id="div1" name="div"/>
<div id="div1" name="div">123</div>
针对<a b="">123</a>这种类型的问题解决方案是:见代码:
修改原来的HtmlDiv:加了字段value,然后注解加了@XStreamConverter(HtmlConverter.class),HtmlConverter这是自己实现了Xstream的Converter
@XStreamAlias("div")
@XStreamConverter(HtmlConverter.class)
public class HtmlDiv implements BaseConverterBean {
@XStreamAsAttribute
private String id;
@XStreamAsAttribute
private String name;
private String value;
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 String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
HtmlConverter:
public class HtmlConverter implements Converter {
@Override
public void marshal(Object obj, HierarchicalStreamWriter writer,MarshallingContext arg2) {
HtmlDiv div = (HtmlDiv)obj;
writer.setValue(div.getValue());
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext arg1) {
HtmlDiv div = new HtmlDiv();
div.setValue(reader.getValue());
return div;
}
@SuppressWarnings("unchecked")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(HtmlDiv.class);
}
}
经测试这样就能取到value的值的。