Xstream-xml和實體物件相互轉換特殊問題
阿新 • • 發佈:2019-01-30
之前發了一篇博文《xml和實體物件相互轉換 一步到位 》,在專案實際應用過程中我遇到了這種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>
-
<
- <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程式碼- <?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"
- <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
Java程式碼- @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"})publicstaticclass InputFileInfo {
@XStreamAsAttribute
private String type;
private String fileName;
}