XML在Java中使用Jdom进行解析和编辑

问题描述:

我在这个问题上苦苦挣扎了一个星期。我尝试用java编写一个可编辑电子书的程序。我选择的电子书格式是fictionbook,它的数据包含在一个xml文件中。我可以打开这个文件并在JTextComponent中生成一个源视图。在我的编辑预览和源视图中有两个togglebuttons。他们使用相同的JTextComponent进行显示。当用户点击sourceview时,它会显示选择的文件源(纯xml)。我通过解析我需要显示的数据来从这个源生成预览。如果我在源视图中更改某些内容,它也将显示在预览中,因为它从那里生成,我的问题是我该如何反向。因此,如果我在预览中更改某些内容,它也会在源代码中进行更改。XML在Java中使用Jdom进行解析和编辑

很难将这看作是一个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正是你不想要的,但它可能是一个很好的领导。 –