1. 程式人生 > >Xstream-xml和實體物件相互轉換特殊問題

Xstream-xml和實體物件相互轉換特殊問題

之前發了一篇博文《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.     public String getId() {  
  10.         return id;  
  11.     }  
  12.     public void setId(String id) {  
  13.         this.id = id;  
  14.     }  
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.     public String getValue() {  
  22.         return value;  
  23.     }  
  24.     public void setValue(String value) {  
  25.         this.value = value;  
  26.     }  
  27. }  


HtmlConverter:

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

經測試這樣就能取到value的值的。

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

}

同上自定義轉換一樣功能。