之前发了一篇博文《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的值的。
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"fileName"})
public static class InputFileInfo {
@XStreamAsAttribute
private String type;
private String fileName;
}
同上自定义转换一样功能。
http://crawler.iteye.com/blog/1672986