diff --git a/lib/oga/xml/generator.rb b/lib/oga/xml/generator.rb
index d094e34..27d81bb 100644
--- a/lib/oga/xml/generator.rb
+++ b/lib/oga/xml/generator.rb
@@ -65,6 +65,13 @@ module Oga
if child_node = children && current.children[0]
current = child_node
+ elsif current == @start
+ # When we have reached the root node we should not process
+ # any of its siblings. If we did we'd include XML in the
+ # output from elements no part of the root node.
+ after_element(current, output) if current.is_a?(Element)
+
+ break
else
until next_node = current.is_a?(Node) && current.next
if current.is_a?(Node) && current != @start
diff --git a/spec/oga/xml/generator_spec.rb b/spec/oga/xml/generator_spec.rb
index 683daea..00d0a87 100644
--- a/spec/oga/xml/generator_spec.rb
+++ b/spec/oga/xml/generator_spec.rb
@@ -47,5 +47,36 @@ describe Oga::XML::Generator do
output.should == ''
end
end
+
+ describe 'using a Text node in a Document as the root node' do
+ it 'returns a String' do
+ text = Oga::XML::Text.new(text: "\n")
+ element = Oga::XML::Element.new(name: 'foo')
+ document = Oga::XML::Document.new(children: [text, element])
+
+ described_class.new(text).to_xml.should == "\n"
+ end
+ end
+
+ describe 'using an Element in a Document as the root node' do
+ it 'returns a String' do
+ text = Oga::XML::Text.new(text: "\n")
+ element = Oga::XML::Element.new(name: 'foo')
+ document = Oga::XML::Document.new(children: [text, element])
+
+ described_class.new(element).to_xml.should == ''
+ end
+ end
+
+ describe 'using an Element with a sibling as the root node' do
+ it 'returns a String' do
+ element1 = Oga::XML::Element.new(name: 'a')
+ element2 = Oga::XML::Element.new(name: 'b')
+ document = Oga::XML::Document.new(children: [element1, element2])
+
+ described_class.new(element1).to_xml.should == ''
+ described_class.new(element2).to_xml.should == ''
+ end
+ end
end
end