[XML-SIG] Learning to use elementtree

Doran, Harold HDoran at air.org
Thu Apr 3 00:33:14 CEST 2008


Well, I think I'm getting close. But, I think this is similar to the
problem I had when I started. This seems to create a huge data file with
all information under the first item, and then again all information
under the second item and so forth.

for statentityref in \
et.findall('admin/responseanalyses/analysis/analysisdata/statentityref')
:   
   print >> f, statentityref.attrib['id']
   for statentityref in \
 
et.findall('admin/responseanalyses/analysis/analysisdata/statentityref/s
tatentityref'):   
      for statval in statentityref.findall('statval'):
         print >> f, statentityref.attrib['id'], '\t',
statval.attrib['type'], '\t', statval.attrib['value']

I think again I may not be limiting the intended xpath.


> -----Original Message-----
> From: J. Cliff Dyer [mailto:jcd at unc.edu] 
> Sent: Wednesday, April 02, 2008 3:36 PM
> To: Doran, Harold
> Cc: xml-sig at python.org
> Subject: Re: [XML-SIG] Learning to use elementtree
> 
> On Wed, 2008-04-02 at 15:28 -0400, Doran, Harold wrote:
> > Indeed, navigating the xml is tough (for me). I have been 
> able to get 
> > the following to work. I put in "Sub Element" to indicate the new 
> > section of data. But, from looking at the text output, one doesn't 
> > know which item these sub elements belong to. I think the 
> solution is 
> > to create an index like 13965-0 to show that this is the 
> > subinformation from the item above it. That seems to be 
> where I am getting stuck.
> > Although, I am open to other suggestions on how to best 
> represent the 
> > output.
> > 
> > from xml.etree.ElementTree import ElementTree as ET
> > 
> > filename = raw_input("Please enter the AM XML file: ") new_file = 
> > raw_input("Save this file as: ")
> > 
> > # create a new file defined by the user f = open(new_file, 'w')
> > 
> > et = ET(file=filename)
> > 
> > for statentityref in \
> > 
> et.findall('admin/responseanalyses/analysis/analysisdata/statentityref
> > ')
> > :
> >     for statval in statentityref.findall('statval'):
> >       print >> f, statentityref.attrib['id'], '\t', 
> > statval.attrib['type'], '\t', statval.attrib['value']
> > 
> > f.write("\n\n")
> > f.write("Sub Element\n\n")
> > 
> > for statentityref in \
> > 
> et.findall('admin/responseanalyses/analysis/analysisdata/statentityref
> > /s
> > tatentityref'):
> >     for statval in statentityref.findall('statval'):
> >       print >> f, statentityref.attrib['id'], '\t', 
> > statval.attrib['type'], '\t', statval.attrib['value']
> > f.close()
> 
> Do you want your second statentityref loop to be based on its 
> parent statentityref?  If so, you need to nest it in the 
> original loop, and use an xpath relative to your outer 
> statentityref (and watch for name collisions).
> 
> 
> 
> 


More information about the XML-SIG mailing list