~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Demo/xml/rss2html.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import sys
 
2
 
 
3
from xml.sax import make_parser, handler
 
4
 
 
5
# --- Templates
 
6
 
 
7
top = \
 
8
"""
 
9
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 
10
<HTML>
 
11
<HEAD>
 
12
  <TITLE>%s</TITLE>
 
13
</HEAD>
 
14
 
 
15
<BODY>
 
16
<H1>%s</H1>
 
17
"""
 
18
 
 
19
bottom = \
 
20
"""
 
21
</ul>
 
22
 
 
23
<HR>
 
24
<ADDRESS>
 
25
Converted to HTML by sax_rss2html.py.
 
26
</ADDRESS>
 
27
 
 
28
</BODY>
 
29
</HTML>
 
30
"""
 
31
 
 
32
# --- The ContentHandler
 
33
 
 
34
class RSSHandler(handler.ContentHandler):
 
35
 
 
36
    def __init__(self, out = sys.stdout):
 
37
        handler.ContentHandler.__init__(self)
 
38
        self._out = out
 
39
 
 
40
        self._text = ""
 
41
        self._parent = None
 
42
        self._list_started = 0
 
43
        self._title = None
 
44
        self._link = None
 
45
        self._descr = ""
 
46
 
 
47
    # ContentHandler methods
 
48
 
 
49
    def startElement(self, name, attrs):
 
50
        if name == "channel" or name == "image" or name == "item":
 
51
            self._parent = name
 
52
 
 
53
        self._text = ""
 
54
 
 
55
    def endElement(self, name):
 
56
        if self._parent == "channel":
 
57
            if name == "title":
 
58
                self._out.write(top % (self._text, self._text))
 
59
            elif name == "description":
 
60
                self._out.write("<p>%s</p>\n" % self._text)
 
61
 
 
62
        elif self._parent == "item":
 
63
            if name == "title":
 
64
                self._title = self._text
 
65
            elif name == "link":
 
66
                self._link = self._text
 
67
            elif name == "description":
 
68
                self._descr = self._text
 
69
            elif name == "item":
 
70
                if not self._list_started:
 
71
                    self._out.write("<ul>\n")
 
72
                    self._list_started = 1
 
73
 
 
74
                self._out.write('  <li><a href="%s">%s</a> %s\n' %
 
75
                                (self._link, self._title, self._descr))
 
76
 
 
77
                self._title = None
 
78
                self._link = None
 
79
                self._descr = ""
 
80
 
 
81
        if name == "rss":
 
82
            self._out.write(bottom)
 
83
 
 
84
    def characters(self, content):
 
85
        self._text = self._text + content
 
86
 
 
87
# --- Main program
 
88
 
 
89
parser = make_parser()
 
90
parser.setContentHandler(RSSHandler())
 
91
parser.parse(sys.argv[1])