node = XML::Node.new('foo') << XML::Node.new('bar') << "bars contents"
puts node.parent.parent
<foo>
 <bar>bars contents</bar>
<foo>

FYI - one downside of returning the appended object as opposed to self is that the variable node above is the "bar contents" node. Thus you have to write:

puts node.parent.parent.

I find that surprising.  It would be nice if node was the top node.

Thus in the example it would be nice for << to return the child object in some cases and self in others. Sigh.

Anyone see a way of getting the best of both worlds?


<< should operate on the contents of a node, IMHO.

So:

node1 = XML::Node.new('foo')
node1 << 'bar'

would produce '<foo>bar</foo>' and not '<foo/>bar'.  However:

node2 = XML::Node.new('bar')
node1 << node2

should produce '<foo><bar/></foo>'.

If the argument to << is a string, append to the xmlNode->content via xmlNodeAddContent(3). If, however, the argument is an XML::Node, then use xmlAddChild(3) to add an xmlNode->child node.


+ and << should behave differently:

'node1 + node2' should produce '<foo/><bar/>'

I didn't spend a lot of time on the operators when writing this, but I feel pretty strongly that there should be such a distinction and it should behave differently based on the argument's data type (not that I'm actively using the lib atm, but...). That a useful suggestion? -sc


--
Sean Chittenden
[EMAIL PROTECTED]



_______________________________________________
libxml-devel mailing list
libxml-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/libxml-devel

Reply via email to