2

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

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

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

我可以使用 EclipseLink MOXy 以某种方式实现吗?例如,我想用“someReplacement”替换“some”并添加“whatever”。

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

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

这是因为输入 XML 模式可能会有很大差异,但我关心的特定元素存在于每个模式中。因此,理想情况下,我希望找到一种解决方案,例如在绑定文件之类的东西中调整 XPath,以指向我想要替换/插入的元素。

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

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

4

3 回答 3

1

这个解决方案对我有用:

Java 到 XML 的转换?(用例 #5)

http://blog.bdoughan.com/2010/09/jaxb-xml-infoset-preservation.html

于 2013-07-09T05:53:23.387 回答
0

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

于 2013-07-07T23:04:23.223 回答
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");
        }
    }
}
于 2016-05-02T07:26:28.207 回答