Justin Bailey wrote:
> Have you seen the xml builder project? It's along the same lines but gives a
> much cleaner syntax. Your example could be done along these lines:
> 
> xml.GovTalkMessage :xmlns => "http ..." { |xml|
>   xml.EnvelopeVersion "2.0"
>   xml.Header {
>    xml.MessageDetails {
>    etc, etc
>    }
>   }
> }
> 
> Check it out http://rubyforge.org/projects/builder/

I don't like the reuse of xml inside of each of the blocks. IIRC it is why I dislike the CGI library. Visually it looks like
everything gets appended right to xml, although thinking twice I know that the block scope is actually where the xml addition
takes place.

  xml.MyTag :xmlns+."..." { |xml|
    xml.ATag "2.0"
    xml.BTag {
      xml.CTag {
         xml.DTAG { ....etc.... }
      }
    }
  }

The above makes me think I am getting:
  <MyTag>
    <ATag />
    <BTag />
    <CTag />
    <DTag />
  </MyTag>

My brain thinks this at first because of the reuse of "xml". Now thinking twice I realize that the scope takes precedence, and my
brain conforms.

It seems like the following would be more approriate, although it would be more typing:

  xml.MyTag :xmlns+."..." { |xml|
    xml.ATag "2.0"
    xml.BTag { |btag|
      btag.CTag { |ctag|
         ctag.DTAG { |dtag| ....etc.... }
      }
    }
  }

This way I can easily visually tell that what the hiearchy looks like in my xml document w/o having to count tabs or curly braces.

Zach