Author: dmeyer Date: Fri Mar 23 16:26:20 2007 New Revision: 2586 Added: trunk/base/src/xmlutils.py
Log: some xml helper functions Added: trunk/base/src/xmlutils.py ============================================================================== --- (empty file) +++ trunk/base/src/xmlutils.py Fri Mar 23 16:26:20 2007 @@ -0,0 +1,108 @@ +# -*- coding: iso-8859-1 -*- +# ----------------------------------------------------------------------------- +# xmlutils.py - some classes helping dealing with xml files +# ----------------------------------------------------------------------------- +# $Id: decorators.py 1941 2006-10-30 09:28:15Z dmeyer $ +# +# ----------------------------------------------------------------------------- +# Copyright (C) 2007 Dirk Meyer, Jason Tackaberry +# +# First Edition: Dirk Meyer <[EMAIL PROTECTED]> +# Maintainer: Dirk Meyer <[EMAIL PROTECTED]> +# +# Please see the file AUTHORS for a complete list of authors. +# +# This library is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version +# 2.1 as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA +# +# ----------------------------------------------------------------------------- + +__all__ = [ 'SaxTreeHandler' ] + +# python xml import +import xml.sax + +class SaxTreeHandler(xml.sax.ContentHandler): + """ + Handler for the SAX parser. The memeber function 'handle' will + be called everytime an element given on init is closed. The parameter + is the tree with this element as root. A node can either have children + or text content. + """ + class Node(object): + """ + A node created by the SaxTreeHandler + """ + def __init__(self, name, attr): + self.name = name + self.attr = attr + self.children = [] + self.content = '' + + def getattr(self, attr): + return self.attr.get(attr) + + def __repr__(self): + return '<Node %s>' % self.name + + def __init__(self, *elements): + """ + Create handler with a list of element names. + """ + self._elements = elements + self._nodes = [] + + + def startElement(self, name, attr): + """ + SAX callback + """ + node = self.Node(name, attr) + if len(self._nodes): + self._nodes[-1].children.append(node) + self._nodes.append(node) + + + def endElement(self, name): + """ + SAX callback + """ + node = self._nodes.pop() + node.content = node.content.strip() + if name in self._elements: + self.handle(node) + if not self._nodes: + self.finalize() + + + def characters(self, c): + """ + SAX callback + """ + if len(self._nodes): + self._nodes[-1].content += c + + + def handle(self, node): + """ + SaxTreeHandler callback for a complete node. + """ + pass + + + def finalize(self): + """ + SaxTreeHandler callback at the end of parsing. + """ + pass ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Freevo-cvslog mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog
