Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > xstream对xmlnode的属性(attribute)解析的问题。
【标  题】:xstream对xmlnode的属性(attribute)解析的问题。
【关键字】:xstream,xmlnode,attribute
【来  源】:http://www.blogjava.net/rory/archive/2007/01/17/howto-dealwith-xstream-xmlnode-attribute.html

xstream对xmlnode的属性(attribute)解析的问题。

Your Ad Here xstream是个好东西。对于配置文件的读取很方便。在mybog中我就用到了。不过今天打算用yupoo的api来做相册。发现xstream对于xmlnode的attribute解析支持不是那么的好。
对于这种节点格式的非常的简单
<result>
????
<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一下就可以读到值了
File?file?=?new?File("src/test/java/com/jdkcn/test/result.xml");
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);
可是Yupoo的api返回的xmlrpc的结果是这样的
<result?page="1"?pages="1"?perpage="100"?total="19">
????
<photos>
????????
<photo?id="ff8080810fc8ac78010fd3f158d40a52"
????????????owner
="ff8080810f1a387b010f1a83d6530dfc"?title="Gmail-2"?host="4"
????????????dir
="20061230"?filename="231905_1463411198"?/>
????
</photos>
</result>
这样就load不到值了。没法去mailist里面找答案,果然有人问。
Hello,

I am not sure about the subject but here is what I needed help for:

XML:

<field name="value">I am a Field.</field>

I have already tried several structures and nothing seem to work.

Is this possible for XStream? :)

How is the Java class form to support this?

Thanks!




有人回答是看Converter的文档。果然找到答案了。
自己写一个converter就可以了。
下面是我的converter
package?com.jdkcn.xstream;

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:rory.cn@gmail.com">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了。
XStream?stream?=?new?XStream();
stream.registerConverter(
new?YupooResultConverter());
stream.alias(
"result",?YupooResult.class);


以后大家一定要注意啊。顺序问题也是很重要的。
创造共用协议:署名,非商业,保持一致?? 除经特别注明外,本文章版权归莫多泡泡所有.
署名,非商业用途,保持一致.???somebody(莫多)























参考:
http://xstream.codehaus.org/converter-tutorial.html








如何在eclipse中,选中java文件,快速定位到class:【上一篇】
三种Tomcat的插件比较:【下一篇】
【相关文章】
  • 区分HttpServletRequest 中getAttribute() 与 getParameter() 方法
  • 利用xstream处理java中的集合类
  • 设置窗口透明度的SetLayeredWindowAttributes函数
  • Biztalk 开发笔记(1)envelope attribute in Schema
  • JSP中出现According to TLD or attribute directive in tag file
  • 技巧和诀窍:使用PrincipalPermissionAttribute在业务和数据层中添加授权规则
  • 交互测试接口的简单实现 reflect(反射) + XStream
  • request.getAttribute("name")赔了夫人又折兵
  • Attribute在.net编程中的应用
  • Attribute在拦截机制上的应用
  • 【随机文章】
  • 创新谈-李小军
  • 再小再敏捷的项目也一定要实行的制度:BUG和变更的三方会审
  • asp+ 操作Cookie 方法大全
  • Visual C# 2005 - 如何于DataGridView控件中以跨数据行方式显示数据
  • ASP中函数调用对参数的影响
  • MFC中消息循环处理的几个函数之间的区别
  • 数据连接件
  • 电脑综合诊治硬盘故障详解
  • Hibernate学习笔记(五)--数据库事务与并发
  • 给“控制面板”改图标
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.