I've used the MS XMLDOM COM object to read an XML file with 1-to-many
relationships into an multi-dimensional array of structures. I haven't used
on a very large document, but I suppose that given sufficient memory and
time it would work fine. You can get the COM object from:
http://msdn.microsoft.com/downloads/tools/xmlparser/xmlparser.asp
These are the object methods and properties I used:
XMLDOMDocument. The top node containing the entire XML DOM tree.
* Async. When set to True (the default setting), returns control to the
caller before the download is finished. In ColdFusion, this can cause a
partial document load, so set it to False.
* Load(url). Loads the XML tree from a web document.
* getElementsByTagName(nodename). Returns a list of document-level Nodes
where the NodeName matches the argument.
hasChildNodes(). Returns True if the Node has Child Nodes.
XMLDOMNodeList. A collection of nodes in the document tree, supporting
iteration with <cfloop>.
XMLDOMNode. A single node in the document tree.
* hasChildNodes(). Returns True if the Node has children, False if it doesn�
t.
* childNodes(). Returns all of the Node�s child nodes as an XMLDOMNodeList.
* selectNodes(nodename). Returns an XMLDOMNodeList of the current Node�s
children where the NodeName matches the argument.
* Attributes. Returns a collection of Attributes, each of which consists of
a key-value pair.
* Text. The value between the Node�s begin and end tags.
Here's some sample code to instantiate the object and read in a top-level
node list:
<cfobject type="COM" name="xmlDoc" class="Microsoft.XMLDOM" action="CREATE">
<cfset xmlDoc.async = false>
<cfset xmlDoc.load(url of file)>
<!--- Create an XMLDOMNodeList --->
<cfset nodes = xmlDoc.getElementsByTagName(nodeName)>
<cfset nodeArray = Arraynew(1)>
<!--- Loop through the nodes --->
<cfloop collection="#nodes#" item="thisNode">
<!--- For each node, append a structure to the array --->
<cfset ArrayAppend(nodeList, structnew()>
<cfset nodeIndex = ArrayLen(nodeList)>
<!--- Get the node's text and its other attributes into the structure --->
<cfset nodeList[nodeIndex]["Text"] = thisNode.Text>
<cfset attributeList = thisNode.Attributes>
<cfloop collection="#attributeList#" index="thisAttribute">
<cfset nodeList[nodeIndex][thisAttribute.nodeName] = thisAttribute.Text>
</cfloop>
</cfloop>
The full documentation for the COM object is at:
http://msdn.microsoft.com/library/psdk/xmlsdk/xmld2rl1.htm
--David Gassner
> Has anybody had any success in creating an array of structures
> from an XML
> document?
>
> I have a 30,000 item catalog that is in XML that I have to import into my
> DB Server but I also have to do some data checking via CF.
>
> Any help would be great
------------------------------------------------------------------------------
Archives: http://www.eGroups.com/list/cf-talk
To Unsubscribe visit
http://www.houseoffusion.com/index.cfm?sidebarRsts&bodyRsts/cf_talk or send a message
to [EMAIL PROTECTED] with 'unsubscribe' in the body.