如何在 java 中使用 vtd-xml 将新元素附加到现有 xml

How do I append new element to existing xml using vtd-xml in java

这是我当前的 xml 文件,

<MainRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Root>      
    <RootElement name="rootelement1" date="21.Nov">
        <SubElement id="32"/>
    </RootElement>
    <RootElement name="rootelement2" date="1.Dec">
        <SubElement id="45"/>
    </RootElement>
    <RootElement name="rootelement3" date="18.Dec">
        <SubElement id="12"/>
    </RootElement>      
</Root>

我需要一个带有 vtd-xml 解析的 java 代码来附加一个新的 RootElement 标签及其 SunElement 标签 这是我的 java 代码

public static void main(String[] args) {
    VTDGen vtdGenerator;
    VTDNav vtdNavigator;
    XMLModifier xmlModifier;
    AutoPilot autoPilot;
    vtdGenerator = new VTDGen();
    if (vtdGenerator.parseFile("test.xml", false)) {
        vtdNavigator = vtdGenerator.getNav();
        autoPilot = new AutoPilot(vtdNavigator);
        autoPilot.bind(vtdNavigator);
        autoPilot.selectElement("RootElement");
        xmlModifier = new XMLModifier();
        while (autoPilot.iterate()) {
            // code to insert new RootElement tag with its subElment tag and
            // their atributes
        }
    }
    xmlModifier.output(new FileOutputStream("test.xml"));
}

我可以使用这个插入单个标签

xmlModifier.insertAfterElement("<RootElement name=\"rootelement4\" date=\"21.Dec\">\n\t\t<SubElement id=\"66\"/>\n</RootElement>");

但我想插入多个 RootElement 标记,此过程现在允许这样做。 任何人都可以帮助我将多个标签附加到 xml。有没有其他方法可以解决这个问题。 我不想使用 DOM 解析器,因为 DOM 不保证属性的顺序。

我需要这样的输出,

<MainRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Root>      
    <RootElement name="rootelement1" date="21.Nov">
        <SubElement id="32"/>
    </RootElement>
    <RootElement name="rootelement2" date="1.Dec">
        <SubElement id="45"/>
    </RootElement>
    <RootElement name="rootelement3" date="18.Dec">
        <SubElement id="12"/>
    </RootElement>      
    <RootElement name="rootelement4" date="21.Dec">
        <SubElement id="66"/>
    </RootElement>      
</Root>

考虑将多个 RootElement 附加到单个字符串,然后将该字符串作为一个单元插入到现有 XML 中。如果您使用 insertBeforeElement,则 toElement(VTDNav.PrevSibling) 会将光标移回...请记住 XMLModifier 不会立即响应文档更改,因此底层 vtd 和索引完全反映了内容和结构原始文件。