对于这种节点格式的非常的简单
<page>1</page>
<pages>1</pages>
<perpage>100</perpage>
<total>19</total>
<photos>
<photo>
<id>ff8080810fc8ac78010fd3f158d40a52</id>
<owner>ff8080810f1a387b010f1a83d6530dfc</owner>
<title>Gmail-2</title>
<host>4</host>
<dir>20061230</dir>
<filename>231905_1463411198</filename>
</photo>
</photos>
</result>
简单的alias一下就可以读到值了
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
XStream stream = new XStream();
stream.alias("result", YupooResult.class);
stream.alias("photo",YupooPhoto.class);
YupooResult result = (YupooResult)stream.fromXML(reader);
<photos>
<photo id="ff8080810fc8ac78010fd3f158d40a52"
owner="ff8080810f1a387b010f1a83d6530dfc" title="Gmail-2" host="4"
dir="20061230" filename="231905_1463411198" />
</photos>
</result>
有人回答是看Converter的文档。果然找到答案了。
自己写一个converter就可以了。
下面是我的converter
import java.util.ArrayList;
import java.util.List;
import com.jdkcn.yupoo.YupooPhoto;
import com.jdkcn.yupoo.YupooResult;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/**
* @author <a href="mailto:[email protected]">somebody</a>
* @since Jan 16, 2007 6:12:35 PM
* @version $Id YupooResultConverter.java$
*/
public class YupooResultConverter implements Converter {
/* (non-Javadoc)
* @see com.thoughtworks.xstream.converters.Converter#marshal(java.lang.Object, com.thoughtworks.xstream.io.HierarchicalStreamWriter, com.thoughtworks.xstream.converters.MarshallingContext)
*/
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
// FIXME unfinish.
}
/* (non-Javadoc)
* @see com.thoughtworks.xstream.converters.Converter#unmarshal(com.thoughtworks.xstream.io.HierarchicalStreamReader, com.thoughtworks.xstream.converters.UnmarshallingContext)
*/
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
YupooResult result = new YupooResult();
result.setPage(new Integer(reader.getAttribute("page")));
result.setPages(new Integer(reader.getAttribute("pages")));
result.setPerpage(new Integer(reader.getAttribute("perpage")));
result.setTotal(new Integer(reader.getAttribute("total")));
reader.moveDown();
List<YupooPhoto> photos = new ArrayList<YupooPhoto>();
while(reader.hasMoreChildren()) {
reader.moveDown();
YupooPhoto photo = new YupooPhoto();
photo.setDir(reader.getAttribute("dir"));
photo.setFilename(reader.getAttribute("filename"));
photo.setHost(reader.getAttribute("host"));
photo.setId(reader.getAttribute("id"));
photo.setOwner(reader.getAttribute("owner"));
photo.setTitle(reader.getAttribute("title"));
photos.add(photo);
reader.moveUp();
}
result.setPhotos(photos);
return result;
}
/* (non-Javadoc)
* @see com.thoughtworks.xstream.converters.ConverterMatcher#canConvert(java.lang.Class)
*/
public boolean canConvert(Class clazz) {
return clazz.equals(YupooResult.class);
}
}
然后调用的地方修改一下就ok了。
stream.registerConverter(new YupooResultConverter());
stream.alias("result", YupooResult.class);
以后大家一定要注意啊。顺序问题也是很重要的。
除经特别注明外,本文章版权归莫多泡泡所有.
署名,非商业用途,保持一致. somebody(莫多)
参考:
http://xstream.codehaus.org/converter-tutorial.html