1. A computer implemented method for creating a compact tree node representation of an extensible markup language (XML) document, the method comprising: creating a compact tree node representation of an extensible markup language (XML) document by: allocating a first portion of memory of a main memory of a computer to store a first memory block for storing an in-memory instance of an XML tree index data structure for the XML document, the in-memory instance of the XML tree index data structure comprising an array of rows in which each row holds a node identifier, one or more pointers referencing to one or more children nodes, allocating a second portion of the memory of the main memory of the computer to store one or more separate data structures for storing at least a portion of the node data for the XML document, the one or more separate data structures each storing a different type of node data; traversing the XML document from a first node to a final node and through at least one intermediate node; and processing traversed nodes of the XML document, the processing comprising: in determining a traversed node is an element node, adding the element node to the first portion of the main memory and copying an element name of the element node into the one or more separate data structures for storing at least a portion of the node data; in determining the traversed node is a text node, populating a text node index into the first portion of the main memory and copying text node values into the one or more separate data structures for storing at least a portion of the node data, the text node values copied being accessible via the text node index; in determining the traversed node is an attribute node, populating an attribute node index into the first portion of the main memory and copying an attribute name and attribute value into the one or more separate data structures, the attribute value copied being accessible via the attribute node index.