1 | """Basic XML utilities based on minidom - the built in Document Object Model |
---|
2 | """ |
---|
3 | |
---|
4 | import sys |
---|
5 | from xml.dom import minidom, Node |
---|
6 | #from xml.sax import make_parser, parse as validate, handler |
---|
7 | |
---|
8 | def print_tree(n, indent=0): |
---|
9 | while n: |
---|
10 | #print 'nodeType', n.nodeType, Node.ELEMENT_NODE |
---|
11 | #if n.nodeType != Node.ELEMENT_NODE: |
---|
12 | # break |
---|
13 | |
---|
14 | print ' '*indent,\ |
---|
15 | 'Node name: "%s",' %n.nodeName,\ |
---|
16 | 'Node type: "%s",' %n.nodeType,\ |
---|
17 | 'Node value: "%s"' %str(n.nodeValue).strip() |
---|
18 | |
---|
19 | |
---|
20 | print_tree(n.firstChild, indent+4) |
---|
21 | n = n.nextSibling |
---|
22 | |
---|
23 | |
---|
24 | def pretty_print_tree(n, indent=0): |
---|
25 | print n |
---|
26 | |
---|
27 | def parse(fid): |
---|
28 | """Parse XML file descriptor and return DOM object. |
---|
29 | """ |
---|
30 | |
---|
31 | # FIXME (OLE): XML code should be validated against the DTD |
---|
32 | #validate(fid, handler) |
---|
33 | #doc = minidom.parse(fid, make_parser()) |
---|
34 | |
---|
35 | fid.seek(0) |
---|
36 | doc = minidom.parse(fid) |
---|
37 | return doc |
---|
38 | |
---|
39 | |
---|
40 | def get_elements(nodelist): |
---|
41 | """Return list of nodes that are ELEMENT_NODE |
---|
42 | """ |
---|
43 | |
---|
44 | element_list = [] |
---|
45 | for node in nodelist: |
---|
46 | if node.nodeType == Node.ELEMENT_NODE: |
---|
47 | element_list.append(node) |
---|
48 | |
---|
49 | return element_list |
---|
50 | |
---|
51 | |
---|
52 | def get_text(nodelist): |
---|
53 | """Return a concatenation of text fields from list of nodes |
---|
54 | """ |
---|
55 | |
---|
56 | s = '' |
---|
57 | for node in nodelist: |
---|
58 | if node.nodeType == Node.TEXT_NODE: |
---|
59 | s += node.nodeValue + ', ' |
---|
60 | |
---|
61 | if len(s)>0: s = s[:-2] |
---|
62 | return s |
---|