File: trace_ns.py

package info (click to toggle)
python-xml 0.8.4-10.1%2Blenny1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 4,972 kB
  • ctags: 10,628
  • sloc: python: 46,730; ansic: 14,354; xml: 968; makefile: 201; sh: 20
file content (37 lines) | stat: -rw-r--r-- 1,177 bytes parent folder | download | duplicates (3)
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
'''
Walk through a namespace-compliant XML file and print out the
the namespaces of all elements and attributes in document order
'''

from xml.dom.ext.reader import PyExpat
from xml.dom.NodeFilter import NodeFilter

def TraceNs(doc):
    snit = doc.createNodeIterator(doc, NodeFilter.SHOW_ELEMENT, None, 0)
    curr_elem = snit.nextNode()
    while curr_elem:
        print "Current Element", curr_elem.nodeName
        #FIXME: put a GetDefaultNs method into Ext
        #ns = Namespace.GetDefaultNs(curr_elem)
        #print "\tDefault NS\t", ns
        print "\t"+curr_elem.nodeName+"\t\t", curr_elem.namespaceURI

        header_printed = 0

        for k in curr_elem.attributes.keys():
            if curr_elem.attributes[k].namespaceURI:
                if not header_printed:
                    header_printed = 1
                    print "\tAttributes"
                print "\t\t"+curr_elem.attributes[k].nodeName+"\t", curr_elem.attributes[k].namespaceURI

        print
        curr_elem = snit.nextNode()


if __name__ == "__main__":
    import sys
    reader = PyExpat.Reader()
    doc = reader.fromUri(sys.argv[1])
    TraceNs(doc)
    reader.releaseNode(doc)