Marcin Stępnicki wrote:
> I've skimmed through many Python&XML related books/articles but I am
> unable to find anything that is similar to my problem - but it seems to
> me that it should be common.
> 
> Anyway: I've got the SQL query which returns:
> 
> col1 | col2 | col3
> -----+------+-----
>   a  | a10  | b20
>   a  | a10  | b30
>   a  | a20  | b30
> 
> I need to generate the following:
> 
> <tag1 "col1"="a">
>       <tag2 "col2"="a10">
>               <tag3 "col3"="b20" />
>               <tag3 "col3"="b30" />
>       </tag2>
> 
>       <tag2 "col2"="a20">
>               <tag3 "col3"="b30" />
>       </tag2>
> </tag1>  

I'd use a two-step approach here. Collect the data in a dict of dicts, then
write it out into XML.

Something like this:

  c1d = {}
  for c1, c2, c3 in rows:
      c2d = c1d.get(c1)
      if c2d is None:
          c2d = c1d[c1] = {}
      c3_list = c2d.get(c2)
      if c3_list is None:
          c3d = c2d[c2] = []
      c3_list.append(c3)

  root = ET.Element("root") # in case "col1" has more than one value
  for c1, c2d in c1d.iteritems():
      el_c1 = ET.SubElement(root, "tag1", col1=c1)
      for c2, c3_list in c2d.iteritems():
          el_c2 = ET.SubElement(el_c1, "tag2", col2=c2)
          for c3 in c3_list:
              ET.SubElement(el_c2, "tag3", col3=c3)

Stefan
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to