Как добавить новый элемент в существующий XML с помощью vtd-xml в 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>

Мне нужен код Java с анализом vtd-xml, чтобы добавить новый тег 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>

1 ответ

Решение

Попробуйте добавить несколько RootElement к одной строке, а затем вставить эту строку в существующий XML как один модуль. Если вы используете insertBeforeElement, то toElement(VTDNav.PrevSibling) переместит курсор назад... помните, что XMLModifier не учитывает изменение документа мгновенно, поэтому базовый vtd и индексирование полностью отражают содержание и структуру исходного документа.

Другие вопросы по тегам