Как добавить новый элемент в существующий 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 и индексирование полностью отражают содержание и структуру исходного документа.