From: "Sean O'Dell" Date: 2003-08-28T17:43:23+09:00 Subject: Re: [ANN] QuiXML 0.0.0 Gavin Sinclair wrote: > On Wednesday, August 27, 2003, 5:50:09 PM, Sean wrote [snipped]: > > >>I've been a big fan of Sean Russell's REXML library for awhile now, but >>an internal project in which I embedded the Ruby interpreter required >>certain features in an XML library I couldn't quite get out of any one >>of the existing API's out there, so I wrote QuiXML. > > > I'm curious, what features did you need that weren't already provided? > > Gavin Well, quite a few things I couldn't get in a single library. One was marshaling (transmutation: not really marshaling); I was reading/writing a lot of XML, and I wanted some of it to come and go as Ruby objects. I had code that was performing that task for me "as-needed" but it got to be a REAL pain after awhile, and I wanted to do something a little more out-of-the-way. Another was native Ruby data types. I wanted to be able to generate an XML data tree using only Hashes and Arrays, because the XML was going to and from some other code and I didn't want to stop and write abstraction layers. A happy medium for me was generating trees using only Ruby data types, and then passing them off to QuiXML to be written, performing, of course, marshaling as it went. Even though it's not a true abstraction layer for the other code, having it all as native Ruby containers means I can rip out QuiXML whenever I want; it's very easy to generate XML output from a set of native containers with a known structure. Also, I just *like* creating my trees as native Ruby data types, rather than depending on the library itself to perform that task; it just feels more flexible that way. I feel sort of "tied up" with the XML library with commands like "add_element." Another thing was XPath; it works well most of the time, but sometimes I feel mired with it. Since my QuiXML trees often contain real Ruby objects, rather than strings, it made more sense to produce an addressing scheme that made use of the "case-equality" method that many built-in objects have (String, Regex, Range, Date, etc.). The way QuiXML's element path addressing works, you can find elements using regular expressions, numerical ranges or even look up specific dates or ranges. I've just been a lot happier with it; it feels more "Ruby" to me. Also, it had to be in C. I eat through a lot of XML, and using C with the expat library just makes it blazingly fast. Mmm... automatic encoding/decoding of special characters like <, >, ', " and & too. Ah, and last but not least: I just feel a lot more productive in it. =) I released it because I thought perhaps like-minded folks might appreciate it. =) Sean O'Dell