我正在为eclipse编写插件,它应该是2页的XML编辑器:第一个是xml编辑器(扩展TextEditor),第二个是某种构建器。想象一下我在说什么你可以采用标准的faces-config
eclipse编辑器:我的第一页是“Source”页面,我的第二页就像“ManagedBean”< / em>页面。目前为了同步我在构建器页面上所做的更改,我只需从编辑器中获取文本,相应地更改它,然后将此文本放回编辑器。像这样:
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">
所以我真的需要知道如何只更新文档的一部分,我已经改变了部分。
答案 0 :(得分:0)
奇怪的是没有人回答,因为解决方案非常简单。它是replace()
文档的TextEditor
方法:
editor.getDocumentProvider().getDocument(editor.getEditorInput()).replace(offset, length, newText);
唯一的问题是找到这些offset
和length
,但在我的情况下,这不是问题,因为我的文档不是很复杂,简单的正则表达式可以解决问题。 :)