<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Rory's Blog
    Happy study,Happy work,Happy life
    posts - 22,  comments - 46,  trackbacks - 0
    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);



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

    2007年1月18日更新。
    這里感謝網友 Ivan Chen(西濱)?的提示。原來新版的xstream可以簡單的解決了。在1.2.1的doc里面找到了這個兩個方法。

    useAttributeFor

    public void useAttributeFor(java.lang.String?fieldName,
                                java.lang.Class?type)
    Use an XML attribute for a field or a specific type.

    Parameters:
    fieldName - the name of the field
    type - the Class of the type to be rendered as XML attribute
    Throws:
    XStream.InitializationException - if no AttributeMapper is available
    Since:
    1.2

    useAttributeFor

    public void useAttributeFor(java.lang.Class?type)
    Use an XML attribute for an arbotrary type.

    Parameters:
    type - the Class of the type to be rendered as XML attribute
    Throws:
    XStream.InitializationException - if no AttributeMapper is available
    Since:
    1.2

    這兩個方法都是從1.2開始支持的。
    也不用自己寫converter了。這樣就可以了
    ????????stream.alias("result",?YupooResult.class);
    ????????stream.useAttributeFor(
    "page",?Integer.class);
    ????????stream.useAttributeFor(
    "pages",?Integer.class);
    ????????stream.useAttributeFor(
    "perpage",?Integer.class);
    ????????stream.useAttributeFor(
    "total",?Integer.class);
    ????????stream.alias(
    "photo",?YupooPhoto.class);
    ????????stream.useAttributeFor(
    "id",?String.class);
    ????????stream.useAttributeFor(
    "owner",?String.class);
    ????????stream.useAttributeFor(
    "title",?String.class);
    ????????stream.useAttributeFor(
    "host",?String.class);
    ????????stream.useAttributeFor(
    "dir",?String.class);
    ????????stream.useAttributeFor(
    "filename",?String.class);

    創造共用協議:署名,非商業,保持一致
    ?? 除經特別注明外,本文章版權歸莫多泡泡所有.
    署名,非商業用途,保持一致.???somebody(莫多)
    posted on 2007-01-17 18:24 莫多 閱讀(7999) 評論(2)  編輯  收藏 所屬分類: Other

    FeedBack:
    # re: xstream對xmlnode的屬性(attribute)解析的問題。
    2007-01-18 09:19 | Ivan Chen(西濱)
    新版的xstream不用那么麻煩了(說實話,要自己寫一個converter倒不如直接用jdom好了)
    對于attribute,這樣寫
    stream.useAttributeFor("id",String.class);
    就可以。好像也沒有順序問題?  回復  更多評論
      
    # re: xstream對xmlnode的屬性(attribute)解析的問題。[未登錄]
    2007-01-18 10:05 | 莫多
    哦。是么?趕緊下載一個新版試試。  回復  更多評論
      

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(1)

    隨筆分類(27)

    隨筆檔案(22)

    Friends

    搜索

    •  

    積分與排名

    • 積分 - 62230
    • 排名 - 845

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩电影免费在线观看网址 | 免费在线精品视频| 久久99国产乱子伦精品免费| 91成人免费观看| 亚洲精品熟女国产| 高清免费久久午夜精品| 免费人成在线观看网站视频| 久久精品国产亚洲av品善| 在线视频免费观看www动漫| 亚洲成av人无码亚洲成av人| 国产精品视_精品国产免费| 亚洲国产综合91精品麻豆| 国产精品亚洲精品日韩电影| 99re6热视频精品免费观看| av无码东京热亚洲男人的天堂| 在线观看亚洲免费视频| 亚洲色图综合在线| 亚洲国产精品成人AV在线| 免费人妻av无码专区| 免费在线黄色电影| 亚洲欧洲精品一区二区三区| 国产福利在线免费| 老司机免费午夜精品视频| 日本一道一区二区免费看| 亚洲乱码在线卡一卡二卡新区| 18禁超污无遮挡无码免费网站| 亚洲一二成人精品区| 免费国产成人α片| 亚洲av无码国产综合专区 | 亚洲一级黄色视频| 少妇无码一区二区三区免费| 亚洲制服丝袜第一页| 全黄性性激高免费视频| 久久国产乱子伦精品免费不卡 | 亚洲一线产区二线产区精华| 曰皮全部过程视频免费国产30分钟| 人与动性xxxxx免费| 亚洲国产第一页www| 国产高清视频在线免费观看| 国产自国产自愉自愉免费24区| 亚洲伊人久久大香线焦|