Как я могу клонировать весь Документ с помощью Java DOM?

Вы можете обработать OnFormClosing событие формы и попросить пользователя сохранить изменения до закрытия формы или приложения.

protected override void OnFormClosing(FormClosingEventArgs e)
{
    base.OnFormClosing(e);
    DialogResult dr = MessageBox.Show("Do you want to save ?", "Message", 
        MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);

    if (dr == DialogResult.Yes)
    {
        this.tableTableAdapter.Update(closureDataDataSet.Table);
        // dgvClosures.Refresh();
    }
}
5
задан Adam Crume 10 November 2008 в 21:01
поделиться

2 ответа

Однако, как насчет quick'n'dirty пути: сериализируйте целый Документ в строку XML и затем проанализируйте его назад использующий Синтаксический анализатор DOM?

Я не вижу оснований, почему сериализированная версия испытала бы недостаток в чем-либо. Следить для обеспечения примера?

Потребление памяти было бы значительным, но, с другой стороны, при дублировании целого DOM это не может быть маленьким так или иначе...

2
ответ дан 13 December 2019 в 22:19
поделиться

Как указывают некоторые комментарии, существуют проблемы с сериализацией и повторной парсификацией документа. Помимо использования памяти, соображений производительности и нормализации, существует также потеря пролога (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();

В основном, это оно. Вам нужно будет работать с исключениями и, возможно, вы захотите настроить трансформатор, но я оставляю это как упражнение для читателя.

8
ответ дан 13 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: