At top level, the loop in i continuously reiterates the collection of descent paths stored in stack d in the format root.node-collection...leaf.node. Starting from an initial depth of 0 (ie. the leaf-node itself), each such string is then parsed in turn to determine if it has a node at this depth. Obviously, every string in d with have a leaf-node, so the condition "if ( j < str.length )" will evaluate to true. The node in question is then stripped from the string and stored in the temporary variable baseObject, where it is tested against each entry in baseTerms, a stack of "parent" or "container" nodes (nodes which have children) already identified at this depth within the XML document. If no match is found an entry is generated in newTerms, an array of stacks which records each node tagname, followed by the set of all node tagnames that have been found to occur as immediate children of that node anywhere in the XML document. If, however, a match is found, then an entry must have already been generated in newTerms, so baseObject is added to the end of the relevant stack, so long as it hasn't been added before. After each string in d has been tested at depth 0, loop i repeats at depth 1, and so on, until the parsing depth exceeds the depth of the XML document. For example, our control sample will have generated the following stack of "paths" in d: AUTHORS . AUTHOR . FIRSTNAME AUTHORS . AUTHOR . INITIAL1 AUTHORS . AUTHOR . SURNAME AUTHORS . AUTHOR . FIRSTNAME AUTHORS . AUTHOR . EMAIL AUTHORS . AUTHOR . INITIAL2 AUTHORS . AUTHOR . SPECIALFLAGS . FLAGS1 AUTHORS . AUTHOR . SPECIALFLAGS . FLAGS4 AUTHORS . PSEUDOAUTHOR . TITLE Parsing at depth 1, and reading these paths from right to left, newTerms becomes primed as follows: [ 0 ] : [ 0 ] AUTHORS; [ 1 ] PSEUDOAUTHOR; [ 2 ] AUTHOR Parsing at depth 2, newTerms becomes: [ 0 ] : [ 0 ] AUTHOR; [ 1 ] SPECIALFLAGS; [ 2 ] INITIAL2; [ 3 ] EMAIL; [ 4 ] SURNAME; [ 5 ] INITIAL1; [ 6 ] FIRSTNAME [ 1 ] : [ 0 ] PSEUDOATHOR; [ 1 ] TITLE And at depth 3: [ 0 ] : [ 0 ] PSEUDOAUTHOR; [ 1 ] TITLE [ 1 ] : [ 0 ] SPECIALFLAGS; [ 1 ] FLAGS4; [ 2 ] FLAGS1

Script Junkie | An XML Document to JavaScript Object Converter (Web Techniques,
Related Reading
More Insights
INFO-LINK
![]() |
To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy. |