vtd-xml Что мне нужно сделать, перейти к любому элементу

#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.