DTD Parsing

Asun Friere afriere at yahoo.co.uk
Tue Nov 9 22:36:10 EST 2010


On Nov 10, 2:02 pm, Christian Heimes <li... at cheimes.de> wrote:
> Am 10.11.2010 03:44, schrieb Felipe Bastos Nunes:
>
> > I'd like to know too. I work with java and jdom, but I'm doing
> > personal things in python, and plan to go full python in the next 2
> > years. Xml is my first option for configuration files and simple
> > storages.
>
> Don't repeat the mistakes of others and use XML as a configuration
> language. XML isn't meant to be edited by humans.

Yes but configuration files are not necessarily meant to be edited by
humans either!

Having said that, I'm actually old school and prefer "setting=value"
human editable config files which are easily read into a dict via some
code something like this:

def read_config (file_obj) :
    """Reads a config file and returns values as a dictionary

    Config file is a series of lines in the format:
        #comment
        name=value
        name:value
        name = value #comment
    Neither name nor value may contain '#', '=', ':' nor any spaces.

    """
    config = {}
    nameval = re.compile('^\s*([^=:\s]+)\s*(?:=|:)\s*([^=:\s]*)
\s*(?:#.*)?\s*$').search
    comment = re.compile('^\s*($|#)').search
    for line in file_obj :
        if comment(line) : continue
        try :
            name, value = nameval(line).groups()
        except AttributeError :
            sys.stderr.write('WARNING: suspect entry: %s\n' % line)
            continue
        config[name]=value
    file_obj.close()
    return config

Thanks Christian, I might check out 'configobj', but my needs are
rarely more complicated than the above will satisfy.

In any case Felipe, whether you intend to use XML for config or not
(or for any other reason), there are good tools for XML parsing in
python including with DTD validation.  Try the modules 'libxml2',
'lxml', or even, if your needs are modest, the poorly named
'HTMLParser'.

What I'm looking for instead is something to parse a DTD, such as
xmlproc's DTDConsumer.  It might even exist in the modules I've
mentioned, but I can't find it.  In the event, I think I'll use a DTD-
>xsd conversion script and then simply use HTMLParser.  Unless someone
can point me in the way of a simple DTD parser, that is.



More information about the Python-list mailing list