#!/usr/bin/python

from xml.dom.minidom import parse
import sys

xmlfilename = sys.argv[1]
dom         = parse(xmlfilename)



def getChildNodesByType(n,type):
    ce = []
    for f in n.childNodes:
        if f.nodeType==type:
            ce.append(f)
    return ce



def getChildNodesByTypeAndName(n,type,name):
    ce = []
    for f in n.childNodes:
        if (f.nodeType==type) and (f.nodeName==name):
            ce.append(f)
    return ce



def childElements(n):
    return getChildNodesByType(n,1)



def childTexts(n):
    return getChildNodesByType(n,3)



def getChildElementsByTagName(n,tag):
    return getChildNodesByTypeAndName(n,1,tag)



def resolveElementsPathLoop(ns,path):
    if len(path)==0:
        return ns
    else:
        nexttag   = path.pop(0)
        nextns = []
        for n in ns:
            nextns.extend(getChildElementsByTagName(n,nexttag))
        return resolveElementsPathLoop(nextns,path)


        
def resolveElementsPath(dom,path):
    starttag = path.pop(0)
    return resolveElementsPathLoop(dom.getElementsByTagName(starttag),path)



def getTextContent(n):
    children = childTexts(n)
    if len(children)>0:
        return children[0].nodeValue
    else:
        return None



def getAttributeValue(n,a):
    if n.attributes.has_key(a):
        return n.attributes[a].nodeValue
    else:
        return None










print "-- le nom de l'auteur --"

titles = resolveElementsPath(dom,['dc:creator','cc:Agent','dc:title'])
print "L'auteur est",getTextContent(titles[0]),"!"



print "-- le titre du dessin --"

titles = resolveElementsPath(dom,['cc:Work','dc:title'])

print getTextContent(titles[0])



print "-- les mots clefs --"

items = resolveElementsPath(dom,['rdf:Bag','rdf:li'])

for i in items:
    print getTextContent(i)



print "-- les rectangles --"

rectangles = dom.getElementsByTagName("rect")

print "il y en a",rectangles.length,':'

for r in rectangles:
    height = getAttributeValue(r,'height')
    width  = getAttributeValue(r,'width')
    print '  . ',height,' x ',width




