The Virtual Tree is a hierarchical representation of all the elements being extracted that resembles the structure of an HTML document, but where all elements in all documents belong to the same tree. It is made of virtual nodes which represent HTML elements that can also contain information about the updates made to a data table by the Extract action.
On one hand, every time an Extract action is executed, information related to updates made to a table is stored in the nodes that represent the elements that have been extracted or updated. This information can be later on gathered by using the ID_{Table Name} property in an Extract action or by calling the GetExtractionInfo function from JavaScript code. It is also used by the Navigate Each action when a table is given on the Only if modified on... parameter to skip elements that have not been inserted or updated.
Note that, in general, this information doesn't necessarily apply to an element itself but can apply to another element such as a parent one if it's not found in the element itself. Helium Scraper will try to find a one-to-many correspondence between elements to match them and use the proper information when needed. An example of elements that have a one-to-many correspondence are the link and the description of each result in a Google search results page (even though this seems more like a one-to-one correspondence, it can be, and it is treated as a one-to-many correspondence by Helium Scraper). This is the very same logic that is used by the Extract action to distribute elements among data rows in a way that is coherent with the HTML structure of these elements.
This means that if, for instance, from a set of results, each of which is formed by a link and a description, only the description is extracted, a Navigate Each action that navigates through the links and uses the Only if modified on... option will only navigate through links whose matching description have been extracted or updated in the table.
On the other hand, the relation between nodes that represent elements that belong to different HTML documents is kept organized by Helium Scraper, for instance, by setting each link being navigated through by a Navigate Each action as the parent node of every document being navigated to (or in HTML terms, the A element becomes the parent of the target document's BODY element).
For instance, following with the previous example, if we would set as a child action of the Navigate Each action an Extract action that extracts the ID_{Table Name} property of the BODY element (which is the parent element of every other element in the current document) and where {Table Name} is the name of the table to which the descriptions have been previously extracted, the value given by the ID_{Table Name} property will be the Id of the row to which the description, that corresponds to the link the Navigate Each action just navigated through, has been extracted.
This structure can be also organized from JavaScript code by using the SaveToVirtualTree and SetCurrentParent functions.
Note that the Virtual Tree is cleared and rebuilt every time an Actions Tree is executed.