#xml #xpath #vtd-xml
#xml — файл #xpath — путь #vtd-xml #xml #xpath
Вопрос:
Я хочу перемещаться по xml с помощью vtd-xml, и я хочу перейти к любому индексу, заданному XPath. Например:
vg.parseFile("/tmp/somexml.xml",true);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot();
ap.selectXPath("//someelement");
ap.bind(vn);
for (int i = ap.evalXPath(); i != -1;) {
try {
vn.toElement(i);
} catch (Exception ex) {
logger.error(null, ex);
}
Я отладил и, например, получаю индекс 40, но когда я пытаюсь toElement (40), он завершается неудачей. Я продолжаю получать неверную навигацию. Могу ли я в любом случае перейти к любому элементу?
Ответ №1:
Вы не можете попросить vtdNav перейти к любому значению индекса, VTD-XML так не работает по той простой причине, что не гарантируется, что индекс соответствует типу элемента.
Для вас есть способы сохранить / загрузить положение узла или восстановить положение узла из значения индекса. Но в общем случае позиция узла не гарантируется как допустимая позиция в дереве (например, значение атрибута)…
Комментарии:
1. Так что, нет способа использовать эту библиотеку для произвольного доступа? Это просто последовательный?
2. используйте toElement() от VTDNav и задайте ему параметр directiona, вы получите произвольный доступ. Однако это немного отличается от DOM.