Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > python and parsing an xml file

Reply
Thread Tools

python and parsing an xml file

 
 
Matt Funk
Guest
Posts: n/a
 
      02-21-2011
Hi,
I was wondering if someone had some advice:
I want to create a set of xml input files to my code that look as follows:
<?xml version="1.0" encoding="UTF-8"?>

<!-- Settings for the algorithm to be performed
-->
<Algorithm>

<!-- The algorithm type.
-->
<!-- The supported options are:
-->
<!-- - Alg0
-->
<!-- - Alg1
-->
<Type>Alg1</Type>

<!-- the location/path of the input file for this algorithm
-->
<path>./Alg1.in</path>

</Algorithm>


<!-- Relevant information during the processing will be written to a
logfile -->
<Logfile>

<!-- the location/path of the logfile (i.e. where to put the
logfile) -->
<path>c:\tmp</path>

<!-- verbosity level (i.e. how much to print)
-->
<!-- The supported options are:
-->
<!-- - 0 (nothing printed)
-->
<!-- - 1 (print on error)
-->
<verbosity>1</verbosity>

</Logfile>


So there are comments, whitespace etc ... in it.
I would like to be able to put everything into some sort of structure
such that i can access it as:
structure['Algorithm']['Type'] == Alg1
I was wondering if there is something out there that does this.
I found and tried a few things:
1) http://code.activestate.com/recipes/...ata-structure/
It simply doesn't work. I get the following error:
raise exception
xml.sax._exceptions.SAXParseException: <unknown>:1:2: not well-formed
(invalid token)
But i removed everything from the file except: <?xml version="1.0"
encoding="UTF-8"?>
and i still got the error.

Anyway, i looked at ElementTree, but that error out with:
xml.parsers.expat.ExpatError: junk after document element: line 19, column 0


Anyway, if anyone can give me advice of point me somewhere i'd greatly
appreciate it.

thanks
matt

 
Reply With Quote
 
 
 
 
Paul Anton Letnes
Guest
Posts: n/a
 
      02-22-2011
Den 21.02.11 18.30, skrev Matt Funk:
> Hi,
> I was wondering if someone had some advice:
> I want to create a set of xml input files to my code that look as follows:
> <?xml version="1.0" encoding="UTF-8"?>
>
> <!-- Settings for the algorithm to be performed
> -->
> <Algorithm>
>
> <!-- The algorithm type.
> -->
> <!-- The supported options are:
> -->
> <!-- - Alg0
> -->
> <!-- - Alg1
> -->
> <Type>Alg1</Type>
>
> <!-- the location/path of the input file for this algorithm
> -->
> <path>./Alg1.in</path>
>
> </Algorithm>
>
>
> <!-- Relevant information during the processing will be written to a
> logfile -->
> <Logfile>
>
> <!-- the location/path of the logfile (i.e. where to put the
> logfile) -->
> <path>c:\tmp</path>
>
> <!-- verbosity level (i.e. how much to print)
> -->
> <!-- The supported options are:
> -->
> <!-- - 0 (nothing printed)
> -->
> <!-- - 1 (print on error)
> -->
> <verbosity>1</verbosity>
>
> </Logfile>
>
>
> So there are comments, whitespace etc ... in it.
> I would like to be able to put everything into some sort of structure
> such that i can access it as:
> structure['Algorithm']['Type'] == Alg1
> I was wondering if there is something out there that does this.
> I found and tried a few things:
> 1) http://code.activestate.com/recipes/...ata-structure/
> It simply doesn't work. I get the following error:
> raise exception
> xml.sax._exceptions.SAXParseException:<unknown>:1: 2: not well-formed
> (invalid token)
> But i removed everything from the file except:<?xml version="1.0"
> encoding="UTF-8"?>
> and i still got the error.
>
> Anyway, i looked at ElementTree, but that error out with:
> xml.parsers.expat.ExpatError: junk after document element: line 19, column 0
>
>
> Anyway, if anyone can give me advice of point me somewhere i'd greatly
> appreciate it.
>
> thanks
> matt
>


How about skipping the whole xml thing? You can dynamically import any
python module, even if it does not have a python filename. I show an
example from my own code, slightly modified. I just hand the function a
filename, and it tries to import the file. If the input file now
contains variables like
algorithm = 'fast'
I can access the variables with
input = getinput('f.txt')
print input.algorithm.

Good luck,
Paul

+++++++++++++

import imp
def getinput(inputfilename):
"""Parse inputs to program from the given file."""
try:
# http://docs.python.org/library/imp.html#imp.load_source
parameters = imp.load_source("parameters", inputfilename)
except IOError as err:
print >>sys.stderr, '%s: %s' % (str(err), inputfilename)
print >>sys.stderr, 'The specified input file was not found -
exiting'
sys.exit(IO_ERROR)
# Verify presence of all required input parameters, see input.py
example file.
required_parameter_names = ['setting1', 'setting2', 'setting3']
msg = 'Required parameter name not found in input file: {0}'
for parameter_name in required_parameter_names:
assert hasattr(parameters, parameter_name),
msg.format(parameter_name)
return parameters


 
Reply With Quote
 
 
 
 
python@bdurham.com
Guest
Posts: n/a
 
      02-22-2011
Paul,

> How about skipping the whole xml thing? You can dynamically import any python module, even if it does not have a python filename.


Great example!

Can you do the same with a cStringIO based file that exists in memory
vs. on disk? Your example requires a physical file on disk. Is it
possible to accomplish the same using a string vs. a file or temporary
file?

Thank you,
Malcolm (not the OP)
 
Reply With Quote
 
Paul Anton Letnes
Guest
Posts: n/a
 
      02-22-2011
Den 22.02.11 13.29, skrev http://www.velocityreviews.com/forums/(E-Mail Removed):
> Paul,
>
>> How about skipping the whole xml thing? You can dynamically import any python module, even if it does not have a python filename.

>
> Great example!
>
> Can you do the same with a cStringIO based file that exists in memory
> vs. on disk? Your example requires a physical file on disk. Is it
> possible to accomplish the same using a string vs. a file or temporary
> file?
>
> Thank you,
> Malcolm (not the OP)


Malcolm,

I never had the interest, so I did not try. Why don't you just try it?
Just insert your StringIO file into the function and see if it works, or
if it crashes and burns. Let me know what you find out!

Anyway, you could always just write a temporary file. It won't consume a
lot of resources, I imagine.

Cheers,
Paul
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
What libraries should I use for MIME parsing, XML parsing, and MySQL ? John Levine Ruby 0 02-02-2012 11:15 PM
Parsing XML input from web form into namespaced xml file Jason XML 2 04-28-2007 12:41 AM
Different results parsing a XML file with XML::Simple (XML::Sax vs. XML::Parser) Erik Wasser Perl Misc 5 03-05-2006 10:09 PM
[XML::XSLT] empty result while parsing xml file PL Perl Misc 2 12-14-2004 10:24 PM
Print XML parsing to JspWriter (out) Class org.xml.sax.helpers.NewInstance can not access a member of class javax.xml.parsers.SAXParser with modifiers "protected" Per Magnus L?vold Java 0 11-15-2004 02:27 PM



Advertisments