Merge lp:~uninja/python-snippets/xml-snippets into lp:~jonobacon/python-snippets/trunk

Proposed by Travis Nicholl
Status: Needs review
Proposed branch: lp:~uninja/python-snippets/xml-snippets
Merge into: lp:~jonobacon/python-snippets/trunk
Diff against target: 160 lines (+145/-0)
3 files modified
xml/dom_parser.py (+29/-0)
xml/sax_parser.py (+53/-0)
xml/ubuntu_releases.xml (+63/-0)
To merge this branch: bzr merge lp:~uninja/python-snippets/xml-snippets
Reviewer Review Type Date Requested Status
Jono Bacon Pending
Review via email: mp+61688@code.launchpad.net

Description of the change

SAX and DOM based examples of XML parsing

To post a comment you must log in.

Unmerged revisions

100. By Travis Nicholl

Adding XML snippets

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'xml'
=== added file 'xml/dom_parser.py'
--- xml/dom_parser.py 1970-01-01 00:00:00 +0000
+++ xml/dom_parser.py 2011-05-20 01:55:54 +0000
@@ -0,0 +1,29 @@
1#!/usr/bin/env python
2#
3# [SNIPPET_NAME: DOM based XML Parser]
4# [SNIPPET_CATEGORIES: xml]
5# [SNIPPET_DESCRIPTION: Parsing XML with DOM]
6# [SNIPPET_AUTHOR: Travis Nicholl <uninja@enigma9.org>]
7# [SNIPPET_LICENSE: GPL]
8
9from xml.dom.minidom import parse
10
11def print_releases(doc):
12 releases = doc.getElementsByTagName('release')
13 for release in releases:
14 print_release(release)
15
16def print_release(release):
17 """ Print information about Ubuntu releases"""
18 print '\nRelease'
19 attrs = release.attributes
20 keys = attrs.keys()
21 keys.sort()
22 for key in keys:
23 print '\t%s: %s' % (key, attrs[key].value)
24
25 print '\tyear: %s' % release.getElementsByTagName('year')[0].childNodes[0].data
26 print '\tmonth: %s' % release.getElementsByTagName('month')[0].childNodes[0].data
27
28doc = parse('ubuntu_releases.xml')
29print_releases(doc)
030
=== added file 'xml/sax_parser.py'
--- xml/sax_parser.py 1970-01-01 00:00:00 +0000
+++ xml/sax_parser.py 2011-05-20 01:55:54 +0000
@@ -0,0 +1,53 @@
1#!/usr/bin/env python
2#
3# [SNIPPET_NAME: SAX based XML Parser]
4# [SNIPPET_CATEGORIES: xml]
5# [SNIPPET_DESCRIPTION: Parsing XML with SAX]
6# [SNIPPET_AUTHOR: Travis Nicholl <uninja@enigma9.org>]
7# [SNIPPET_LICENSE: GPL]
8
9from xml.sax import make_parser, handler
10
11class TestHandler(handler.ContentHandler):
12 """Class that contains callbacks for parsing events"""
13
14 def __init__(self):
15 self.indent_level = 0
16 self.buffer = ""
17 self.in_element = False
18
19 def startElement(self, name, attrs):
20 """Called when the start of an element is found"""
21 print self.indent_level * ' ', name,
22
23 if len(attrs) > 0:
24 print "{",
25 for key in sorted(attrs.keys()):
26 print '%s=\'%s\'' % (key, attrs[key]),
27 print "}"
28
29 self.indent_level += 3
30
31 if name == 'year' or name == 'month' or name == 'lts':
32 self.in_element = True
33 self.buffer = ""
34 elif name == 'releases':
35 print
36
37 def endElement(self, name):
38 """Called when the end of an element is found"""
39 if name == 'year' or name == 'month' or name == 'lts':
40 print self.buffer
41 else:
42 print
43
44 self.indent_level -= 3
45
46 def characters(self, chars):
47 """Called when character data is found"""
48 if self.in_element:
49 self.buffer += chars
50
51parser = make_parser()
52parser.setContentHandler(TestHandler())
53parser.parse('ubuntu_releases.xml')
054
=== added file 'xml/ubuntu_releases.xml'
--- xml/ubuntu_releases.xml 1970-01-01 00:00:00 +0000
+++ xml/ubuntu_releases.xml 2011-05-20 01:55:54 +0000
@@ -0,0 +1,63 @@
1<?xml version='1.0' encoding='UTF-8'?>
2<releases>
3 <release codename='Warty Warthog' lts='False'>
4 <year>4</year>
5 <month>10</month>
6 </release>
7 <release codename='Hoary Hedgehog' lts='False'>
8 <year>5</year>
9 <month>04</month>
10 </release>
11 <release codename='Breezy Badger' lts='False'>
12 <year>5</year>
13 <month>10</month>
14 </release>
15 <release codename='Dapper Drake' lts='True'>
16 <year>6</year>
17 <month>06</month>
18 </release>
19 <release codename='Edgy Eft' lts='False'>
20 <year>6</year>
21 <month>10</month>
22 </release>
23 <release codename='Feisty Fawn' lts='False'>
24 <year>7</year>
25 <month>04</month>
26 </release>
27 <release codename='Gutsy Gibbon' lts='False'>
28 <year>7</year>
29 <month>10</month>
30 </release>
31 <release codename='Hardy Heron' lts='True'>
32 <year>8</year>
33 <month>04</month>
34 </release>
35 <release codename='Intrepid Ibex' lts='False'>
36 <year>8</year>
37 <month>10</month>
38 </release>
39 <release codename='Jaunty Jackalope' lts='False'>
40 <year>9</year>
41 <month>04</month>
42 </release>
43 <release codename='Karmic Koala' lts='False'>
44 <year>9</year>
45 <month>10</month>
46 </release>
47 <release codename='Lucid Lynx' lts='True'>
48 <year>10</year>
49 <month>04</month>
50 </release>
51 <release codename='Maverick Meerkat' lts='False'>
52 <year>10</year>
53 <month>10</month>
54 </release>
55 <release codename='Natty Narwhal' lts='False'>
56 <year>11</year>
57 <month>04</month>
58 </release>
59 <release codename='Oneiric Ocelot' lts='False'>
60 <year>11</year>
61 <month>10</month>
62 </release>
63</releases>

Subscribers

People subscribed via source and target branches