+my $newText = $xc->getContextNode()->toString();
+print "Document modified with $nchanges change", $nchanges==1?"":"s", "\n";
+
+if ($opts{w}) {
+ ZOOM::IRSpy::_really_rewrite_record($conn, $xc->getContextNode());
+ print "Rewrote record '$id'\n";
+}
+
+if ($opts{n}) {
+ # For some reason, $xc->find() will not work on newly added nodes
+ # -- it returns empty strings -- so we need to make a new
+ # XPathContext. Unfortunately, we can't just go ahead and make it
+ # by parsing the new text, since it will in general include
+ # references to namespaces that are not explicitly defined in the
+ # document. So in the absence of $parser->registerNamespace() or
+ # similar, we are reduced to regexp-hackery to introduce the
+ # namespace. Ouch ouch ouch ouch ouch.
+ my $t2 = $newText;
+ $t2 =~ s@>@ xmlns:e='http://explain.z3950.org/dtd/2.0/'>@;
+ my $newXc = irspy_xpath_context($t2);
+
+ foreach my $key (sort keys %data) {
+ my $ref = $fieldsByKey{$key};
+ my($name, $nlines, $caption, $xpath, @addAfter) = @$ref;
+ my $val = $xc->findvalue($xpath);
+ my $val2 = $newXc->findvalue($xpath);
+ print "New $caption ($xpath) = '$val' = '$val2'\n";
+ }
+}
+
+if ($opts{d}) {
+ my $oldFile = "/tmp/old.txu.$$";
+ my $newFile = "/tmp/new.txu.$$";
+ open OLD, ">$oldFile";
+ print OLD $oldText;
+ close OLD;
+ open NEW, ">/tmp/new.txu.$$";
+ print NEW $newText;
+ close NEW;
+ system("diff $oldFile $newFile");
+ unlink($oldFile);
+ unlink($newFile);
+}