android xml pull 解析 豆瓣书籍

android pull解析豆瓣图书xml

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gd="http://schemas.google.com/g/2005"
    xmlns:opensearch="http://a9.com/-/spec/opensearchrss/1.0/"
    xmlns:db="http://www.douban.com/xmlns/">
    <category scheme="http://www.douban.com/2007#kind"
        term="http://www.douban.com/2007#book" />
    <db:tag count="20" name="片山恭一" />
    <db:tag count="14" name="日本" />
    <db:tag count="10" name="小说" />
    <db:tag count="8" name="日本文学" />
    <db:tag count="4" name="爱情" />
    <title>满月之夜白鲸现</title>
    <author>
        <name>(日)片山恭一</name>
    </author>
    <content>
        冷静地想一想吧!公寓的一个房间里只有两上人,连被褥都铺好了,理应是犯
        错误的时候,我为什么却这么拘谨?一直胆小的毛病又犯了。事到如今,不要
        说上床,就连接吻也还差得很远。这就是横亘在男人和女人之间的又深又暗的
        河流吗?
        如果有可能,我希望把手伸进她的心里,把她内心所有的东西都掏出来。她对
        我究竟是一种什么感觉呢?我在她的心昊确实占有一席之地吗?抑或只是她生
        命中的匆匆过客?
    </content>
    <link rel="self" href="http://api.douban.com/book/subject/1220562" />
    <link rel="alternate" href="http://book.douban.com/subject/1220562/" />
    <link rel="image" href="http://t.douban.com/spic/s1747553.jpg" />
    <db:attribute name="author">(日)片山恭一</db:attribute>
    <db:attribute name="isbn10">7543632608</db:attribute>
    <db:attribute name="isbn13">9787543632608</db:attribute>
    <db:attribute name="pages">180</db:attribute>
    <db:attribute name="tranlator">豫人</db:attribute>
    <db:attribute name="price">18.00</db:attribute>
    <db:attribute name="publisher">青岛出版社</db:attribute>
    <db:attribute name="binding">平装(无盘)</db:attribute>
    <db:attribute name="author-intro">
        片山恭一,1959年生于日本爱媛县,九州大学农学系农业经济学专业毕业。
        学生时代通读了包括夏目漱石和大江健三郎在内的日本近现代文学全集,
        同时读了笛卡尔、莱布尼茨到结构主义的欧洲近现代哲学。也读了马克思。
        学士论文写的是马克思,硕士论文写的是恩格斯。二十二三岁开始创作小说。
        代表作有《在世界中心呼唤爱》、《世界在你不知道的地方运转》、《气息》、
        《别相信约翰·列侬》、《满月之夜白鲸现》、《空镜头》以及新作
        《倘若我在彼岸》、《雨天的海豚们》等。
    </db:attribute>
    <id>http://api.douban.com/book/subject/1220562</id>
    <gd:rating min="1" numRaters="39" average="3.69" max="5" />
</entry>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

private String getBookInfo(InputStream inputStream)
            throws XmlPullParserException, IOException {
       
        /*有关XML解析的初始化操作*/
        //newInstance()方法用于实例化一个PullParserFactory对象,以便于创建XML解析器
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        //指定由XmlPullParserFactory对象产生的解析器能提供对XML命名空间的支持
        factory.setNamespaceAware(true);
        //用当前的XmlPullParserFactory实例化一个XmlPullParser对象  
        XmlPullParser parser = factory.newPullParser();
        //为解析器输入源,这里的源inputStream是豆瓣返回的XML文件流
        parser.setInput(inputStream, "UTF-8");
        /*有关XML解析的初始化操作*/
       
        StringBuilder titleBuilder = new StringBuilder();
        StringBuilder authorBuilder = new StringBuilder();
        StringBuilder publisherBuilder = new StringBuilder();
        StringBuilder priceBuilder = new StringBuilder();
        StringBuilder pagesBuilder = new StringBuilder();
        StringBuilder isbn13Builder = new StringBuilder();
       
//         PULL解析XML的过程:
//         读取到xml的声明返回 START_DOCUMENT;
//         读取到xml的结束返回 END_DOCUMENT ;
//         读取到xml的开始标签返回 START_TAG
//         读取到xml的结束标签返回 END_TAG
//         读取到xml的文本返回 TEXT
//         parser.next()是在以上的事件中循环。
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
            case XmlPullParser.START_DOCUMENT:
                break;
            case XmlPullParser.START_TAG:
//                 if ( parser.getName().equals("name") ) { parser.next(); authorBuilder.append(parser.getText()); }
                //第一个if,当读到开始标签时,判断开始标签是否为title
                //如果是,则parse指向下一个事件,即该标签的文本值TEXT,读取该值
                if ( parser.getName().equals("title") ) {
                    parser.next();
                    titleBuilder.append(parser.getText());
                } else if ( parser.getName().equals("attribute") ) { //是否是attribute标签,如果是,再判断是何种属性
                    if( parser.getAttributeValue(0).equals("author") ) {
                        parser.next();
                        authorBuilder.append(parser.getText());
                    } else if ( parser.getAttributeValue(0).equals("publisher") ) {
                        parser.next();
                        publisherBuilder.append(parser.getText());
                    } else if ( parser.getAttributeValue(0).equals("price") ) {
                        parser.next();
                        priceBuilder.append(parser.getText());
                    } else if ( parser.getAttributeValue(0).equals("pages") ) {
                        parser.next();
                        pagesBuilder.append(parser.getText());
                    } else if ( parser.getAttributeValue(0).equals("isbn13") ) {
                        parser.next();
                        isbn13Builder.append(parser.getText());
                    }
                }//end else if ( parser.getName().equals("attribute") )
                break;
            case XmlPullParser.END_TAG:
                break;
            default:
                break;
            }//end switch
            eventType = parser.next();
        }//end while
        return titleBuilder.toString();//只返回了书名
    }
原文地址:https://www.cnblogs.com/helloweworld/p/2670362.html