Bugs item #21424, was opened at 2008-08-04 00:50
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1971&aid=21424&group_id=494

Category: General
Group: None
Status: Closed
Resolution: Accepted
Priority: 3
Submitted By: Nobody (None)
Assigned to: Charlie Savage (cfis)
Summary: Stringing commands bypasses correct node creation

Initial Comment:
When I create something along the lines of:

foo << XML::Node.new('bar') << "bars contents"

The following is returned:

---------

<foo>
   <bar/>bars contents
</foo>

---------

However, this:

foo << bar = XML::Node.new('bar')
bar << "bars contents"

returns this:

---------

<foo>
   <bar>bars contents</bar>
</foo>

---------

These results have been sporadic at times, it seems.  When I create 
XML::Documents in the console, sometimes it works fine, sometimes it doesn't.  
I have been unable to pinpoint a specific cause, but I am, however, having to 
rewrite a good bit of my code because invalid XML is being produced due to this 
bug.

----------------------------------------------------------------------

Comment By: Masashi Shimbo (shimbo)
Date: 2008-08-21 07:56

Message:
Hello, 

Sorry to interrupt, but I am against this change.
Operator << in Ruby generally returns self, not the 
appended object.
Actually, Node#<< used to return the appended object but
it was changed to be consistent with the Ruby standard
at one point.

Masashi Shimbo

----------------------------------------------------------------------

Comment By: Charlie Savage (cfis)
Date: 2008-08-20 17:26

Message:
Hi Eric,

The problem is that << returns self, and not the appended child.  I've changed 
this in trunk, so the next version of libxml should work the way you request.

----------------------------------------------------------------------

Comment By: Eric Musgrove (tenpaiyomi)
Date: 2008-08-04 01:01

Message:
This also applies to the node creation as well, as can be seen here:

>> a = XML::Document.new()
=> <?xml version="1.0"?>

>> a.root = XML::Node.new('foo')
=> <foo/>
>> root = a.root
=> <foo/>
>> root << XML::Node.new('bar') << XML::Node.new('baz')
=> <foo>
  <bar/>
  <baz/>
</foo>
>> a = XML::Document.new()
=> <?xml version="1.0"?>

>> a.root = XML::Node.new('foo')
=> <foo/>
>> root = a.root
=> <foo/>
>> root << bar = XML::Node.new('bar') 
=> <foo>
  <bar/>
</foo>
>> bar << XML::Node.new('baz')
=> <bar>
  <baz/>
</bar>
>> a
=> <?xml version="1.0"?>
<foo>
  <bar>
    <baz/>
  </bar>
</foo>

>> 


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1971&aid=21424&group_id=494
_______________________________________________
libxml-devel mailing list
libxml-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/libxml-devel

Reply via email to