Я пишу плагин для eclipse, который должен быть XML-редактором с 2 страницами: первая - это XML-редактор (расширяет TextEditor), а вторая - своего рода конструктор. Чтобы представить, о чем я говорю, вы можете взять стандартный faces-config
редактор затмений: моя первая страница «Источник» страница, а моя вторая страница что-то вроде «ManagedBean» страница , В настоящее время для синхронизации изменений, которые я сделал на странице компоновщика, я просто беру текст из редактора, изменяю его соответствующим образом и затем возвращаю этот текст обратно в редактор. Как то так:
String editorText = editor.getDocumentProvider().getDocument(editor.getEditorInput()).get();
String changedText = editorText.substring(0, editorText.lastIndexOf(smth));
changedText += newText + editorText.substring(editorText.lastIndexOf(smth));
editor.getDocumentProvider().getDocument(editor.getEditorInput()).set(changedText)
Работает, но выглядит не очень элегантно. Я хочу применить только изменения. Является ли это возможным?
РЕДАКТИРОВАТЬ: теперь я вижу, что это не работает :) Я имею в виду, что это работает в простых случаях и в случае, если все написано более или менее правильно в редакторе. Но если теги написаны очень плохо (с разрывами строк в самых неожиданных местах, сохраняя правильность XML), это не так. Таким образом, единственный способ сохранить правильные изменения - это преобразовать весь DOM и записать его в редактор. На самом деле это было первое, что я попробовал, но в этом случае все пользовательское форматирование пропало: отступы сохраняются, а разрывы строк внутри тегов (между атрибутами) исчезают. Это:
<myTag attr1="1"
attr2="2">
становится таким:
<myTag attr1="1" attr2="2">
Так что мне действительно нужно знать, как обновить только часть документа, часть, которую я изменил.