1. A method of determining a flush point, comprising: receiving, with a computer including a processor, a query, wherein the query is formed by one or more paths, and wherein each path includes one or more steps, wherein a query structure represents the query, wherein the query structure includes query nodes, and wherein each of the query nodes is flagged with a FOR binding or a LET binding; receiving a hierarchical document including one or more document nodes; determining whether there is a parent axis in the query; in response to determining that there is no parent axis in the query, identifying a first query node in the query structure by traversing the query structure up from one or more extraction nodes and stopping at a first one of the query node flagged with the FOR binding from among the query nodes or a root node of the query structure; flagging the first query node as a flush candidate; identifying a second query node by traversing the query structure from the root node of the query structure downwards until finding the query node that is flagged with a FlushCandidate identifier or the query node that has more than one child from among the query nodes; and flagging the second query node as the flush point.
1. A method of determining a flush point, comprising: receiving, with a computer including a processor, a query, wherein the query is formed by one or more paths, and wherein each path includes one or more steps, wherein a query structure represents the query, wherein the query structure includes query nodes, and wherein each of the query nodes is flagged with a FOR binding or a LET binding; receiving a hierarchical document including one or more document nodes; determining whether there is a parent axis in the query; in response to determining that there is no parent axis in the query, identifying a first query node in the query structure by traversing the query structure up from one or more extraction nodes and stopping at a first one of the query node flagged with the FOR binding from among the query nodes or a root node of the query structure; flagging the first query node as a flush candidate; identifying a second query node by traversing the query structure from the root node of the query structure downwards until finding the query node that is flagged with a FlushCandidate identifier or the query node that has more than one child from among the query nodes; and flagging the second query node as the flush point. 2. The method of claim 1 , further comprising: determining whether there is at least one recursive node in the hierarchical document detected during traversal of the hierarchical document that is described by the query node in the query structure flagged with the FOR binding from among the query nodes while using a descendant axis; and in response to determining that there is at least one recursive node, setting an outermost recursive node to be a new flush point.