【问题标题】:XML Insert/Replacement scenario: JAXB (EclipseLink MOXy?) vs. JDOM vs.?XML 插入/替换场景:JAXB (EclipseLink MOXy?) vs. JDOM vs.?
【发布时间】:2013-07-07 00:35:37
【问题描述】:

假设我有一个非常简单的输入示例 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,还是有什么可以帮助的?

【问题讨论】:

标签: xml jaxb eclipselink moxy jdom


【解决方案1】:

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我认为 XSLT 对于我的用例来说太有限了。从我作为输入的 XML 结构中,我生成新的内容,例如使用外部数据源,然后我用它在输入内容中添加或替换。据我了解,我无法使用 XSLT 完成此操作。
    【解决方案3】:

    以下是在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");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      相关资源
      最近更新 更多