diff --git a/ext/java/nokogiri/XmlNode.java b/ext/java/nokogiri/XmlNode.java
index 5e126817fc..b47a734bae 100644
--- a/ext/java/nokogiri/XmlNode.java
+++ b/ext/java/nokogiri/XmlNode.java
@@ -33,7 +33,16 @@
package nokogiri;
import static java.lang.Math.max;
-import static nokogiri.internals.NokogiriHelpers.*;
+import static nokogiri.internals.NokogiriHelpers.clearXpathContext;
+import static nokogiri.internals.NokogiriHelpers.convertEncoding;
+import static nokogiri.internals.NokogiriHelpers.convertString;
+import static nokogiri.internals.NokogiriHelpers.getCachedNodeOrCreate;
+import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;
+import static nokogiri.internals.NokogiriHelpers.isBlank;
+import static nokogiri.internals.NokogiriHelpers.nodeArrayToRubyArray;
+import static nokogiri.internals.NokogiriHelpers.nonEmptyStringOrNil;
+import static nokogiri.internals.NokogiriHelpers.rubyStringToString;
+import static nokogiri.internals.NokogiriHelpers.stringOrNil;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -43,18 +52,12 @@
import java.util.Iterator;
import java.util.List;
-import nokogiri.internals.HtmlDomParserContext;
-import nokogiri.internals.NokogiriHelpers;
-import nokogiri.internals.NokogiriNamespaceCache;
-import nokogiri.internals.SaveContextVisitor;
-import nokogiri.internals.XmlDomParserContext;
-
import org.apache.xerces.dom.CoreDocumentImpl;
import org.jruby.Ruby;
import org.jruby.RubyArray;
import org.jruby.RubyClass;
-import org.jruby.RubyInteger;
import org.jruby.RubyFixnum;
+import org.jruby.RubyInteger;
import org.jruby.RubyModule;
import org.jruby.RubyObject;
import org.jruby.RubyString;
@@ -76,6 +79,12 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
+import nokogiri.internals.HtmlDomParserContext;
+import nokogiri.internals.NokogiriHelpers;
+import nokogiri.internals.NokogiriNamespaceCache;
+import nokogiri.internals.SaveContextVisitor;
+import nokogiri.internals.XmlDomParserContext;
+
/**
* Class for Nokogiri::XML::Node
*
@@ -1542,6 +1551,10 @@ protected IRubyObject adoptAs(ThreadContext context, AdoptScheme scheme,
try {
Document prev = otherNode.getOwnerDocument();
Document doc = thisNode.getOwnerDocument();
+ if (doc == null & thisNode instanceof Document) {
+ // we are adding the new node to a new empty document
+ doc = (Document) thisNode;
+ }
clearXpathContext(prev);
clearXpathContext(doc);
if (doc != null && doc != otherNode.getOwnerDocument()) {
diff --git a/test/xml/test_node_reparenting.rb b/test/xml/test_node_reparenting.rb
index 02fbe56cc5..2375035c20 100644
--- a/test/xml/test_node_reparenting.rb
+++ b/test/xml/test_node_reparenting.rb
@@ -197,6 +197,17 @@ class TestNodeReparenting < Nokogiri::TestCase
end
end
+ describe "given the new document is empty" do
+ it "adds the node to the new document" do
+ doc1 = Nokogiri::XML.parse("3")
+ doc2 = Nokogiri::XML::Document.new
+ node = doc1.at_xpath("//value")
+ node.remove
+ doc2.add_child(node)
+ assert_match /3<\/value>/, doc2.to_xml
+ end
+ end
+
describe "given a parent node with a default namespace" do
before do
@doc = Nokogiri::XML(<<-eoxml)