`
somebody
  • 浏览: 81505 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
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










莫多 2007-01-17 18:24 发表评论
分享到:
评论
4 楼 去你姑 2010-01-19  
幸好及时搜到了lz的博客,派上大用处了,嘎嘎
3 楼 somebody 2010-01-18  
去你姑 写道
coolantlai神人!
必须膜拜一下,缠了我一天的问题,你一行代码解决了


不客气。很高兴能解决你的问题。
2 楼 去你姑 2010-01-13  
coolantlai神人!
必须膜拜一下,缠了我一天的问题,你一行代码解决了
1 楼 coolantlai 2008-02-02  
在1.2.2中可以用
stream.useAttributeFor(YupooResult.class, "page");

对属性操作

相关推荐

    java 利用Xstream注解生成和解析xml

    Xstream通过使用注解提供了高度的灵活性,使得XML的生成和解析更加简单和直观。在这篇文章中,我们将深入探讨如何利用Xstream的注解来处理XML。 首先,要使用Xstream,我们需要在项目中引入其依赖。如果你使用的是...

    XStream XML解析

    **XStream XML解析** XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。...

    Xstream生产xml和解析xml

    3. **类成员属性别名**:结合`aliasAttribute(Class definedIn, String attributeName, String alias)`和`useAttributeFor(Class definedIn, String fieldName)`方法,可以将某些类成员作为XML属性进行映射。...

    xml解析及使用XStream实现javaBean与xml之间的转换

    XStream不仅支持XML,还内置了对JSON的支持。只需添加额外的转换器,如使用Jettison库,即可实现JavaBean与JSON的转换。 5. **实战演示** 在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何...

    XStream解析xml demo

    本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解XStream的基本用法。XStream的核心概念是通过为Java对象定义一个映射,使得对象的字段与XML元素一一对应。这可以...

    XStream解析XML实例

    **XStream解析XML实例** 在Java开发中,处理XML数据是一项常见的任务,XStream库提供了一个简单而强大的方式来将Java对象序列化为XML,以及从XML反序列化回Java对象。这个实例将深入探讨如何使用XStream进行XML操作...

    xstream解析依赖包

    《XStream解析依赖包详解》 在Java开发中,数据序列化是一个不可或缺的环节,它使得对象的状态可以被保存和恢复。XStream是一款强大的Java库,用于将Java对象转换为XML,反之亦然,极大地简化了序列化和反序列化的...

    xstream轻松解析xml到java对象

    为了安全起见,XStream提供了黑名单和白名单机制,限制哪些类可以被序列化或反序列化,防止潜在的安全问题。 5. **处理复杂数据结构** XStream支持处理复杂的数据结构,包括集合、数组、嵌套对象等。它会自动递归...

    xstream方式解析xml文件

    xstream方式解析及生成xml文件

    Xstream解析xml

    本篇文章将深入探讨如何利用Xstream解析XML文件,并将解析后的数据存储到MySQL数据库中。 首先,我们需要了解Xstream的基本用法。Xstream的核心在于创建一个`XStream`实例,然后通过这个实例来转换XML和Java对象。...

    android XMl 解析神奇xstream 一

    在Android 10中,XML解析相关的优化和更新包括对XML解析器性能的改进,以及对Android Jetpack库的更新,这些库可能包含了对XStream或其他XML解析库的依赖。 总的来说,XStream作为一个强大的XML解析工具,为Android...

    使用xstream解析xml,xml与pojo的双向转化,完整的java 工程

    以下是使用XStream解析XML和POJO双向转化的基本步骤: 1. 引入XStream库:在Java工程中,需要添加XStream的jar包,通常可以通过Maven或Gradle等构建工具管理依赖。在这个项目中,"lib"目录下应该包含XStream的jar...

    XStream组件进行Object与XML互转用法

    XStream 是一个强大的 Java 库,它允许程序员方便地将 Java 对象序列化为 XML,以及将 XML 反序列化回 Java 对象。这个组件在处理数据交换、持久化或跨进程通信时非常有用。在Java开发中,XStream 提供了一种简洁的...

    XStream解析各种数据格式

    ### XStream解析各种数据格式 #### 一、XStream简介 XStream 是一个简单高效的 Java 库,用于将 Java 对象序列化为 XML 文档,同时也支持从 XML 文档反序列化为 Java 对象。它提供了简洁的 API 来简化序列化过程,...

    Xstream生成和解析xml.rar

    本篇文章将详细介绍如何利用Xstream进行XML的生成和解析。 **一、Xstream简介** Xstream是Java社区中的一款开源库,由Johannes Link创建,它的设计目标是使XML序列化和反序列化变得简单直观。Xstream的核心理念是...

    XStream解析字符串不同的标签

    XStream 是一个用 Java 编写的库,它提供了一种简单的方式来序列化和反序列化 Java 对象到 XML,反之亦然。这个工具在处理 XML 数据时非常方便,尤其是在需要将对象模型转换为 XML 文档或者从 XML 文档中重建对象时...

    xstream解析的资料

    本篇文章将深入探讨XStream库的核心概念、工作原理以及如何与SAX解析器结合使用。 首先,我们需要理解XStream的基本原理。XStream通过反射机制来实现对象到XML的转换。它能够自动处理对象的字段,包括嵌套的对象和...

    XStream 解析 android

    本文将深入探讨XStream如何在Android环境中解析XML文件,以及其主要特性和优势。 XStream的核心功能是能够将Java对象转换为XML字符串,并反之将XML字符串转换回Java对象。这种转换过程被称为对象XML绑定。XStream的...

    使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

    在这个场景中,我们关注的是如何使用XStream库来解析MXL(可能是XML的误拼)文件,以及所需的依赖jar包。 首先,让我们了解XStream的核心功能。XStream通过创建一个映射,将Java对象的实例和XML元素之间建立关系。...

    xStream解析工具包

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...

Global site tag (gtag.js) - Google Analytics