У меня есть XML, который выглядит ниже. Я хочу пройти всю серию братьев, используя один общий автопилот. После selectXPath on/a/b, который подводит меня к первому b sibling, я пытаюсь использовать тот же AutoPilot для выбораXPath на c, который вернет всех c братьев. Тем не менее, после цикла пересечения c, я не знаю, как вернуть контекст цикла b. Цель, предназначенная для использования одного общего AutoPilot, - повысить производительность. Есть предположения?Использование 1 AutoPilot, проходящей рядом братьев и сестер внутри серии братьев и сестер?
<a>
<b>
<c>c1</c>
<d>d1.1</d>
<d>d1.2</d>
<d>d1.3</d>
<d>d1.4</d>
<d>d1.5</d>
<d>d1.6</d>
<e>e1</e>
</b>
<b>
<c>c2</c>
<d>d2.1</d>
<d>d2.2</d>
<d>d2.3</d>
<e>e2</e>
</b>
</a>
Имея вышеизложенный XML, моя мотивация заключается в том, чтобы получить значения, пройдя иерархию XML. Требование фактически состоит в том, чтобы создать представление иерархической структуры Java. Чтобы добиться этого, я делаю рекурсивный подход, используя алгоритм глубины. Ниже только для того, чтобы продемонстрировать мое намерение, я просто петли. Как заметил, во внутреннем цикле я вынужден создать новый AutoPilot внутри цикла, чтобы поддерживать другой контекст, проходящий через/a/b. Теперь я хотел бы знать, как я могу получить один AutoPilot. Я пробовал его vtd.push и vtd.pop. Это не работает.
VTDGen vtdGen = new VTDGen();
vtdGen.setDoc(this.xml.getBytes());
vtdGen.parse(false);
VTDNav vtdNav = vtdGen.getNav();
AutoPilot autoPilot1 = new AutoPilot(vtdNav);
autoPilot1.selectXPath("https://stackoverflow.com/a/b");
while (autoPilot1.evalXPath() != -1)
{
AutoPilot autoPilot2 = new AutoPilot(vtdNav);
autoPilot2.selectXPath("c");
System.out.println(autoPilot2.evalXPathToString());
autoPilot2.selectXPath("d");
while (autoPilot2.evalXPath() != -1)
{
System.out.println(vtdNav.toNormalizedXPathString(vtdNav.getCurrentIndex()));
}
autoPilot2.selectXPath("e");
System.out.println(autoPilot2.evalXPathToString());
}
Заранее благодарен.
Можете ли вы разместить свой код? –
Вам нужно взять «c» и «d» из петли –