Xstream-xml和实体对象相互转换特殊问题 博客分类: XMLJ2EE JAVAXstreamXML
程序员文章站
2024-03-24 21:13:22
...
之前发了一篇博文《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的值的。