我有一个如下所示的 XML。我想使用一个共享的 AutoPilot 遍历所有系列的兄弟姐妹。在 /a/b 上的 selectXPath 将我带到第一个 b 兄弟姐妹之后,我尝试使用相同的 AutoPilot 来 selectXPath 在 c 上,这将返回所有 c 兄弟姐妹。但是,在c遍历循环之后,我不知道如何带回b遍历循环的上下文。打算使用一个共享 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("/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());
}
提前致谢。