假设我有一个非常简单的输入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,还是有其他可以帮助的东西?
答案 0 :(得分:1)
这个解决方案对我有用:
Java to XML conversions?(用例#5)
http://blog.bdoughan.com/2010/09/jaxb-xml-infoset-preservation.html
答案 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");
}
}
}