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

时间:2015-11-18 17:33:12

标签: java xml vtd-xml

这是我当前的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代码,用它的SunElement标签追加一个新的RootElement标签 这是我的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>

1 个答案:

答案 0 :(得分:0)

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