Как отмечается в некоторых комментариях, существуют проблемы с сериализацией и повторным анализом документа. В дополнение к использованию памяти, соображениям производительности и нормализации, есть также потеря пролога (DTD или схема), потенциальная потеря комментариев (которые не требуются для захвата) и потеря того, что может быть значительным пробелом. Сериализации следует избегать.
Если реальная цель - сделать копию существующего объекта DOM Document, то он должен обрабатываться программно, в памяти. К счастью, есть относительно простой способ сделать это с помощью функций, доступных в Java 5, или с использованием внешних библиотек XSLT, таких как Xalan, для сквозного преобразования.
Ниже показано решение Java 5:
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tx = tfactory.newTransformer();
DOMSource source = new DOMSource(doc);
DOMResult result = new DOMResult();
tx.transform(source,result);
return (Document)result.getNode();
Вот и все. Вам нужно будет обработать исключения и, возможно, захотите настроить преобразователь, но я оставлю это в качестве упражнения для читателя.