XML插入/替换场景:JAXB(EclipseLink MOXy?)与JDOM vs.?

时间:2013-07-07 00:35:38

标签: xml jaxb eclipselink moxy jdom

假设我有一个非常简单的输入exmaple XML文件,如下所示

<?xml version="1.0"?>
<content>
    <some />
</content>

我想通过在原始结构中的任何位置插入其他元素来修改xml结构,或者用其他内容替换元素。

我能以某种方式使用EclipseLink MOXy实现这一目标吗?例如。我想用“someReplacement”替换“some”并添加“what”。

<?xml version="1.0"?>
<content>
    <someReplacement>
        <more>information</more>
    </someRepaclement>
    <whatever />
</content>

我想要处理的实际XML更复杂,但是我实际上只处理其内容的一小部分,所以我不希望将整个文件解组成复杂的bean结构,对一小组进行更改元素,并将整个结构编组回文件中。至少我不想知道复杂性。

这是因为输入XML模式可能差异很大,但我关注的特定元素存在于每个模式中。所以我理想的是想找到一个解决方案,例如使用类似绑定文件的XPath来指向我想要替换/插入的元素。

我不想使用JDOM,因为我为插入/替换而生成的元素很复杂,我不想“手工”创建它们,而是映射了一些bean结构。

我可以用MOXy做到这一点吗?还有其他JAXB提供商吗?我应该使用JDOM,还是有其他可以帮助的东西?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您应该使用XSLT。 XSLT发明的原因是修改XML结构。

答案 2 :(得分:0)

以下是vtd-xml中执行此任务的代码。 VTD-XML是唯一支持增量更新的xml处理框架......

这是一篇解释此功能的文章......

http://www.devx.com/xml/Article/36379

import java.io.*;
import com.ximpleware.*;

public class simpleUpdate {
    public static void main(String[] args) throws VTDException, IOException{
        // TODO Auto-generated method stub
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false))
            return;
        VTDNav vn = vg.getNav();
        XMLModifier xm = new XMLModifier(vn);
        if (vn.toElement(VTDNav.FC)){
            xm.remove();
            xm.insertAfterElement(" <someReplacement>\n<more>information</more>\n</someRepaclement><whatever/>");
            xm.output("output.xml");
        }
    }
}