Ive taken a quick look at groovy for the first time, and saw an
interesting idea. Using xml to build an object tree, its possible to
write code like this...
Note that foo.bar and foo.bar.star are not arrays, rather
transparently hide multiple elements in one object. Requesting a value
would be handled by the first element.
The interesting part is that theres no quotes around the path
expression, its just evaluated in the context of bar. Complex
expressions could be broken into multiple selects and combined with
normal array operations.
Im sure someones done the xml->object (method in this case) thing, but
has the native path trick been tried in ruby yet?
PS. Extra kudos if someone implements not only the above, but foo.bar
{ ... }, where foo and bar are methods...
Ive taken a quick look at groovy for the first time, and saw an
interesting idea. Using xml to build an object tree, its possible to
write code like this...
Note that foo.bar and foo.bar.star are not arrays, rather
transparently hide multiple elements in one object. Requesting a value
would be handled by the first element.
The interesting part is that theres no quotes around the path
expression, its just evaluated in the context of bar. Complex
expressions could be broken into multiple selects and combined with
normal array operations.
Im sure someones done the xml->object (method in this case) thing, but
has the native path trick been tried in ruby yet?
REXML comes pretty close. I'm sure with a small addition like this one
you get pretty far:
class REXML::Element
def method_missing(sym,*a,&b)
elements[sym.to_s] or super
end
end
Maybe you should add this to module REXML::Node.
PS. Extra kudos if someone implements not only the above, but foo.bar
{ ... }, where foo and bar are methods...
Dunno what you mean here. foo and bar have to be methods.
xml = SimpleXML.load(xml_string) # or File
puts xml.movie[0].plot # => "\n Whether you..."
>>Im sure someones done the xml->object (method in this case) thing, but
>>has the native path trick been tried in ruby yet?
I'm not sure what you mean with native path trick. But if that's being able to write xml.foo which finds a correct branch in DOM tree and allows one to continue with that branch, yes this module already implements it over REXML.
I have currently no plans to go forward with it, but I've been pondering if there should be generic API for accessing and modifying and underlying implementations over whatevery DOM traversal API is present be it REXML or any of the 15 libraries out there :).
On Apr 11, 2005 5:49 PM, Robert Klemme <bob.news@gmx.net> wrote:
"Luke Graham" <spoooq@gmail.com> schrieb im Newsbeitrag news:c6afaed005041020493e803be4@mail.gmail.com...
> Hi list,
>
> Ive taken a quick look at groovy for the first time, and saw an
> interesting idea. Using xml to build an object tree, its possible to
> write code like this...
>
> <foo>
> <bar>
> <jim age="1"/>
> <joe age="2"/>
> </bar>
> <bar/>
> </foo>
>
> foo.bar.star.select { |it| it[@age] == "1" && it.parent.name == "bar"
> && it.star.count == 0 }
>
> Note that foo.bar and foo.bar.star are not arrays, rather
> transparently hide multiple elements in one object. Requesting a value
> would be handled by the first element.
>
> The interesting part is that theres no quotes around the path
> expression, its just evaluated in the context of bar. Complex
> expressions could be broken into multiple selects and combined with
> normal array operations.
>
> Im sure someones done the xml->object (method in this case) thing, but
> has the native path trick been tried in ruby yet?
REXML comes pretty close. I'm sure with a small addition like this one
you get pretty far:
class REXML::Element
def method_missing(sym,*a,&b)
elements[sym.to_s] or super
end
end
Maybe you should add this to module REXML::Node.
> PS. Extra kudos if someone implements not only the above, but foo.bar
> { ... }, where foo and bar are methods...
Dunno what you mean here. foo and bar have to be methods.
xml = SimpleXML.load(xml_string) # or File
puts xml.movie[0].plot # => "\n Whether you..."
I have currently no plans to go forward with it, but I've been pondering if there should be generic API for accessing and modifying and underlying implementations over whatevery DOM traversal API is present be it REXML or any of the 15 libraries out there :).
I just wanted to note there has already been Jim Weirich's Builder around for half a year. With it one can build XML easily, in Groovy style I reckon.