Как вы можете сохранить постоянное обновление и, наконец, сохранить вывод в виде файла с XMLModifier
У меня есть разные методы, пытаясь обновить / удалить элементы / токены в зависимости от пути.
Прямо сейчас, каждый метод, после того как он отредактирован, сразу же сохраняется в виде файла,
VTDGen vg = new VTDGen();
vg.parseFile("input.xml", false);
vn.getNav();
AutoPilot ap = new AutoPilot(vn);
XMLModifier xm;
public void updateToken(String path)
{
xm = new XMLModifier(vn);
ap.selectXPath(path);
......
xm.updateToken(i,"hello");
......
xm.output("output.xml");
}
И если я продолжу вызывать этот метод еще раз, он сохранится, но перезапишет файл с новыми изменениями, и я не хочу этого, так как я могу это сделать?
Я также пытался использовать
xm.outputAndReparse();
где я сохраняю обновление обратно NTDNav vn
и повторно использовать для оставшихся методов, но это повредит остальной части перемещения метода к узлу (с AutoPilot).
Что я хочу: вызвать метод для обновления токена на основе пути, сохранить обновление и снова вызвать метод с другим путем, и, наконец, после завершения обновления сохранить в файл.
Пожалуйста, дайте мне знать, если я ошибаюсь, так как я все еще новичок в VTD-XML. Благодарю.
Получилось, и это то, что я сделал.
VTDGen vg = new VTDGen();
vg.parseFile("input.xml", false);
vn.getNav();
AutoPilot ap = new AutoPilot(vn);
XMLModifier xm = new XMLModifier(vn);
public void output()
{
....
xm.output("output.xml");
....
}
public void updateToken(String path)
{
ap.selectPath(path);
.........
xm.updateToken(i,"hello");
}
1 ответ
XMLModifier - это набор методов, реализующих уникальную возможность инкрементного обновления VTD-XML.
Чтобы обновить содержимое XML, сначала необходимо присоединить экземпляр VTDNav к объекту XMLModifier. Существует три типа операций, которые вы можете применить к документу XML: удаление, вставка и обновление (одновременное удаление и вставка).
Наиболее важные концепции XMLModier:
- Одна операция на значение смещения: две повторяющиеся операции с одним и тем же смещением вызовут исключение.
- Никакое изменение содержимого не учитывается мгновенно: оно просто помечает изменение и ведет его внутреннюю запись в XMLModifier. Выходной XML генерируется только путем вызова метода output().
- Исходный входной XML-документ, содержащийся в объекте VTDNav, остается без изменений.
Таким образом, вы можете пометить столько изменений, сколько захотите, но вам нужно явно просить, чтобы эти изменения были переданы в вывод. Нет изменений для ввода XML.
Поэтому я думаю, что вам нужно убрать метод output() из метода updateToken и вместо этого вызывать его в процедуре более высокого уровня после всех вызовов updateToken. Другими словами, ваш updateToken() должен только пометить изменение, а не выдвигать его к выводу.
Еще один связанный момент: вы можете удалить все метки, вызвав метод reset() XMLModifier. Это поможет вам повторно использовать XMLModifier для применения нового набора операций к входному документу.
Что касается цели outputAndParse(), то это, в основном, состоит в том, чтобы уменьшить усилие кодирования при выводе нового документа и его немедленном разборе. Но у этого метода есть и обратная сторона, так как это относительно медленный / тяжелый метод для вызова. Так что подумайте об этом осторожно. Если вы пытаетесь применить несколько пакетов изменений к содержимому документа, сделайте это все сразу перед вызовом outputAndParse().