Xstream-xml和实体对象相互转换特殊问题

来源:互联网 发布:常见网络安全技术分析 编辑:程序博客网 时间:2024/04/28 12:59

之前发了一篇博文《xml和实体对象相互转换 一步到位 》,在项目实际应用过程中我遇到了这种xml格式:

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <html>  
  3.   <body>  
  4.     <div id="div1" name="div">123</div>  
  5.     <form action="saveForm.asp" method="post">  
  6.       <h1>请输入您的联系信息:</h1>  
  7.       <lable>名字:</lable>  
  8.       <p>  
  9.         <input type="submit" id="btn_sub" name="btn_sub" value="Submit"/>  
  10.         <input type="reset" id="btn_res" name="btn_res" value="Reset"/>  
  11.       </p>  
  12.     </form>  
  13.   </body>  
  14. </html>  

 原来我举例用的是以下xml文件:

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <html>  
  3.   <body>  
  4.     <div id="div1" name="div"/>  
  5.     <form action="saveForm.asp" method="post">  
  6.       <h1>请输入您的联系信息:</h1>  
  7.       <lable>名字:</lable>  
  8.       <p>  
  9.         <input type="submit" id="btn_sub" name="btn_sub" value="Submit"/>  
  10.         <input type="reset" id="btn_res" name="btn_res" value="Reset"/>  
  11.       </p>  
  12.     </form>  
  13.   </body>  
  14. </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

Java代码  收藏代码
  1. @XStreamAlias("div")  
  2. @XStreamConverter(HtmlConverter.class)  
  3. public class HtmlDiv implements BaseConverterBean {  
  4.     @XStreamAsAttribute  
  5.     private String id;  
  6.     @XStreamAsAttribute  
  7.     private String name;  
  8.     private String value;  
  9.   
  10.     public String getId() {  
  11.         return id;  
  12.     }  
  13.   
  14.     public void setId(String id) {  
  15.         this.id = id;  
  16.     }  
  17.   
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.   
  22.     public void setName(String name) {  
  23.         this.name = name;  
  24.     }  
  25.   
  26.     public String getValue() {  
  27.         return value;  
  28.     }  
  29.   
  30.     public void setValue(String value) {  
  31.         this.value = value;  
  32.     }  
  33.   
  34. }  

 

 


HtmlConverter:

Java代码  收藏代码
  1. public class HtmlConverter implements Converter {  
  2.   
  3.     @Override  
  4.     public void marshal(Object obj, HierarchicalStreamWriter writer,MarshallingContext arg2) {  
  5.         HtmlDiv div = (HtmlDiv)obj;  
  6.         writer.setValue(div.getValue());  
  7.     }  
  8.   
  9.     @Override  
  10.     public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext arg1) {  
  11.         HtmlDiv div = new HtmlDiv();  
  12.         div.setValue(reader.getValue());  
  13.         return div;  
  14.     }  
  15.   
  16.     @SuppressWarnings("unchecked")  
  17.     @Override  
  18.     public boolean canConvert(Class clazz) {  
  19.         return clazz.equals(HtmlDiv.class);  
  20.     }  
  21.   
  22. }  

 

经测试这样就能取到value的值的。


@XStreamConverter(value=ToAttributedValueConverter.class, strings={"fileName"})
public static class InputFileInfo {
    @XStreamAsAttribute
    
private String type;
private String fileName;

}

同上自定义转换一样功能。


http://crawler.iteye.com/blog/1672986