From: Jimmy Z. <cra...@co...> - 2006-08-22 21:34:45
|
Yes, this is indeed how Autopilot is implemented, one xpath expression per autoPilot object is the intended user, and nodeIteration can be thought of as an xpath expression... I think it may be easier if there is code on how DOM would work, and I can offer you suggestions/workarounds in VTD-XML code... If you try DOM's node iterator, it is quite similar to VTD-XML's autoPilot ----- Original Message ----- From: "Walinsky, Frank" <fwa...@ex...> To: "Jimmy Zhang" <jz...@xi...> Sent: Tuesday, August 22, 2006 1:58 PM Subject: RE: push and pop Using the xml doc from below: I'm iterating over the "a" element and then the "b" element. For each "b" element, the user wants to use one of its children(one of the "c" elements). I have the "c" element name in a variable ( in actual practice the "c" element names are unique) and I do an xpath using the AutoPilot and this variable to get the correct child. Then I do something with the "c" element content. Now I want to go back to the top of the iteration and get the next "b" element. This is where the AutoPilot thinks there are no more "b" elements when in fact there is one more "b" element in the first "a" element. -----Original Message----- From: Jimmy Zhang [mailto:jz...@xi...] Sent: Tuesday, August 22, 2006 3:57 PM To: Walinsky, Frank Cc: vtd...@li... Subject: Re: push and pop It may be a case-specific hack for you... AutoPilot internally *remembers* a few variables (string name, depth etc), to capture/restore, there may be additional data structure (e.g. a stack) needed to store those variables... but my questions is how you really do anything different from using DOM you will still have to instantiate nodeIterators for each levels right? also vtd...@li... seems to be working now ----- Original Message ----- From: "Walinsky, Frank" <fwa...@ex...> To: "Jimmy Zhang" <jz...@xi...> Sent: Tuesday, August 22, 2006 11:46 AM Subject: RE: push and pop What might be needed is a capture/restore of the AutoPilot along with the currentoffset -----Original Message----- From: Jimmy Zhang [mailto:jz...@xi...] Sent: Tuesday, August 22, 2006 11:19 AM To: Walinsky, Frank Subject: Re: push and pop I need to think about this... ----- Original Message ----- From: "Walinsky, Frank" <fwa...@ex...> To: <jz...@xi...> Sent: Tuesday, August 22, 2006 4:13 AM Subject: RE: push and pop I will try another approach using just 1 AutoPilot by trying to rework my current code. -----Original Message----- From: jz...@xi... [mailto:jz...@xi...] Sent: Monday, August 21, 2006 10:18 PM To: Walinsky, Frank Subject: Re: push and pop Can you kinda explain why allocating multiple AutoPilots is show-stopping?? because autoPilot allocation is fairly light weight? Maybe VTD-XML can custom build something for your case... Walinsky, Frank writes: > Jimmy, > I did try 3 different AutoPilots after I sent this and that does work > just as you thought it would. > It also works without doing any push or pop. > My situation has a user generated state which could have an unlimited > amount of nesting. > This state is processed by some generic code, which is not custom > generated but used by all user generated states. > This works fine with the DOM product I'm using. > I was looking to reduce the memory footprint and do a proof of concept > with your app for management. > If I can't use the one AutoPilot with push and pop, I'm dead in the > water with your app right out of the gate. > If you could take a closer look, when you have time, and see if it is a > bug or just not possible, I would greatly appreciate it. > Thx for all your help, > Frank > > > ________________________________ > > From: Jimmy Zhang [mailto:jz...@xi...] > Sent: Monday, August 21, 2006 4:13 PM > To: Walinsky, Frank; vtd...@li... > Subject: Re: push and pop > > > Frank, upon a quick look, I feel you might want to instantiate three > autoPilot > objects, the first one you set the element name "a," the second set the > element > name "b," and the last one set the element "c." Could > Cheers, > Jimmy Zhang > > ----- Original Message ----- > From: Walinsky, Frank <mailto:fwa...@ex...> > To: in...@xi... > Sent: Monday, August 21, 2006 12:40 PM > Subject: push and pop > > Jim, > I apologize again for using this address but it has become > completely frustrrating trying to send to the list. > I just tried a handfull of times and had my message returned. I > did get one through this morning so I know it does work > but when is anybodies guess. > > Could you please look at this when you have time? > > > > Is it possible and if so, is there any sample code somewhere > that does the following: > (I ask because I haven't found a way or I'm probably using the > api incorrectly) > > I'm trying to use the same AutoPilot object in a 3 level nesting > using a VTDNav "push" > before entering the next lower level and the VTDNav "pop" before > returning to the previous higher level. > Neither the "iterate" or an "evalXPath" advance to the next > element after the pop. > > Here's a sample xml I'm using: > <?xml version=\"1.0\" encoding=\"UTF-8\"?> > <root> > <a> > <b> > <c>this is abc_11</c> > <c>this is abc_12</c> > <c>this is abc_13</c> > <c>this is abc_14</c> > </b> > <b> > <c>this is abc_21</c> > <c>this is abc_22</c> > <c>this is abc_23</c> > <c>this is abc_24</c> > </b> > </a> > <a> > <b> > <c>this is second abc_31</c> > </b> > </a> > </root> > > > Here's a snippet of my code. > > vn.toElement(VTDNav.ROOT); > > ap.selectElement("a"); > while (ap.iterate()) { > System.out.println("--- before push() of \"a\"---"); > vn.dumpContext(); > vn.push(); > System.out.println("a = " + vn.getCurrentIndex()); > > ap.selectElement("b"); > while (ap.iterate()) { > System.out.println("--- before push() of \"b\" ---"); > vn.dumpContext(); > vn.push(); > System.out.println("b = " + vn.getCurrentIndex()); > > ap.selectElement("c"); > while (ap.iterate()) { > System.out.println("c = " + vn.getCurrentIndex()); > } > > vn.pop(); > System.out.println("--- after pop() of \"b\" ---"); > vn.dumpContext(); > } > > vn.pop(); > System.out.println("--- after pop() of \"a\" ---"); > vn.dumpContext(); > } > > > > > > > |