Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.


Channels ▼
RSS

Script Junkie | An XML Document to JavaScript Object Converter (Web Techniques,


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



Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips 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.