2011-10-18 40 views
0

我在這個問題上苦苦掙扎了一個星期。我嘗試用java編寫一個可編輯電子書的程序。我選擇的電子書格式是fictionbook,它的數據包含在一個xml文件中。我可以打開這個文件並在JTextComponent中生成一個源視圖。在我的編輯預覽和源視圖中有兩個togglebuttons。他們使用相同的JTextComponent進行顯示。當用戶點擊sourceview時,它會顯示選擇的文件源(純xml)。我通過解析我需要顯示的數據來從這個源生成預覽。如果我在源視圖中更改某些內容,它也將顯示在預覽中,因爲它從那裏生成,我的問題是我該如何反向。因此,如果我在預覽中更改某些內容,它也會在源代碼中進行更改。XML在Java中使用Jdom進行解析和編輯

回答

0

很難將這看作是一個JDOM特有的問題。底層表示可能幾乎任何東西。通常情況下,預覽就是這樣:一個不能直接編輯的最終結果視圖。如果您希望能夠編輯源文件並通過WYSIWYG視圖編輯,則需要調查模型視圖控制器模式。

底層XML將是您的模型。 XML編輯器視圖和WYSIWYG視圖(您當前的預覽)都是視圖和控制器。目前這只是你的XML編輯器的情況,而預覽只不過是一個視圖。

從預覽中更改底層XML聽起來很困難,除非每個節點都可以以某種方式標識(如通過id屬性)。在預覽中需要一些額外的基礎數據才能在另一個方向進行耦合。

我不確定一個JDOM文檔是您的目的最好的模型。也許你最好使用像JAXB這樣的簡單的JavaBeans來表示可以編組到XML並從XML解組的XML模型。所以你得到:

    model: JavaBeans with JAXB annotations 
        ^
         | 
    (directly) +--------------------------------------+ (through JAXB) 
       |          | 
WYSIWYG editor: view + controller    XML editor: view + controller 

但這只是我的第一印象。調查現有編輯,找出完成此操作的好方法。可能檢查IDE插件/模塊可能很有趣,因爲IDE通常允許多種類型的編輯器更改基礎數據模型。

+0

感謝您的回答。它幫助了我越來越多地進入JAXB,我發現它比我以前的解決方案更適合我的問題。再次感謝。 – Halufolia

+0

很酷。順便說一下,我相信JAXB提供了一種在JavaBeans和相應XML的DOM之間進行同步的方式,這意味着一方的變化傳播到另一方。這可能是有用的。我還沒有嘗試過這個,也許DOM正是你不想要的,但它可能是一個很好的領導。 –