From: Ben Schumacher Date: 2001-11-14T07:05:51+09:00 Subject: [ruby-talk:25087] FW: RE: REXML Question (Re: XML libraries (Re: Re: ruby and webser vices)) FYI- Quick follow up. NQXML allowed you to do this since elements weren't closed automatically, they were instead close when you put an 'endElement'. -- Possibly the same behavior as expat, although I have less experience with that directly. REXML's syntax is very similar to a library produced by Jabber, Inc. for use with C++. If you're curious its at http://jabber.tigris.org/. Ben -----Original Message----- From: Ben Schumacher Sent: Tuesday, November 13, 2001 3:06 PM To: 'ruby-talk@ruby-lang.org' Subject: RE: [ruby-talk:25061] RE: REXML Question (Re: XML libraries (Re: Re: ruby and webser vices)) I'm not suggesting that you add it to REXML, as I think it doesn't really fit. It is a rather rare case, after all. I was really just curious if somebody had an idea for the best way to work around it. Building the initial element is relatively simple right now, but it is always *possible* that it might change with the protocol. One of the advantages of the Jabber protocol is that it is XML and therefore *extremely* flexible and I could see a potential for somebody wanting to add an attribute (rather than change the values of the current attributes) to implement some special use. For right now, I'll just ignore that and build it with the current possible standards. Just curious if somebody had some insight I missed. Thanks, Ben -----Original Message----- From: Sean Russell [mailto:ser@germane-software.com] Sent: Tuesday, November 13, 2001 1:10 PM To: ruby-talk@ruby-lang.org Subject: [ruby-talk:25061] RE: REXML Question (Re: XML libraries (Re: Re: ruby and webser vices)) Ben Schumacher wrote: > However, when I create the element with REXML it ends up being closed: How have you seen this done in other XML toolkits? REXML closes tags, because any call to Element.write (should) produce a valid XML document. This requires that all tags be closed. Specifically, REXML will *read* documents in a stream, but it won't create them that way; internally, all REXML documents that are programmatically created are document trees. > xmlns:stream='http://etherx.jabber.org/streams'/> > > I figure I could probably work around this easily enough by writing the > output to a string and then removing the slash, but I was wondering if > somebody else had a better solution? (I could, of course, build the entire > opening element manually and not use REXML, but I'd prefer not to do > this.) Hmmm. Interesting problem. If the stream is one large document on a single socket, it might be easier to hand-craft the opening tag (it isn't complicated, is it?) and then use the XML toolkit to generate the individual tags, closing the tag at the end by hand. I could provide a solution in REXML by providing a Element.start_tag() and Element.end_tag() methods, but I'm hesitant to complicate the API if this is a single-use (or extremely rare) need. I'm open to suggestions. -- --- SER