user1521740
user1521740

Reputation: 11

Difficulty parsing out xml in coldfusion

I have been trying to figure out the best way to extract data from an xml file using Coldfusion. The xml file is relatively simple, but figure out this problem. The XML data looks like this:

<recordname>
<biols>Perennial </biols>
<biomd>
common </biomd>
<catcn>Tibetan Flora Images</catcn>
<catot>Photo</catot>
<darfm>Araliaceae</darfm>
<dargn>Aralia</dargn>
<darsn>Aralia apioides</darsn>
<comnm>qing ye long yan du he</comnm>
<mulmm0>
<mulmm>
<irn>10221626</irn>
</mulmm>
<mulmm>
<irn>10221629</irn>
</mulmm>
<mulmm>
<irn>10221631</irn>
</mulmm>
<mulmm>
<irn>10221633</irn>
</mulmm>
<mulmm>
<irn>10221636</irn>
</mulmm>
</mulmm0>
</record>

I'd like to return each mulmm irn as a record with the associated parent information included in that record, such that I'd have 5 records with the irn and in each record would be the recordname information. What is the best way to proceed?

I apologize for the simple question - for some reason this is stumping me. Thanks for your help!

Upvotes: 1

Views: 129

Answers (1)

Cyril Hanquez
Cyril Hanquez

Reputation: 698

Not sure it is what you want but here is my 2 cents:

<cfset myDoc ="<recordname>
<biols>Perennial </biols>
<biomd>
common </biomd>
<catcn>Tibetan Flora Images</catcn>
<catot>Photo</catot>
<darfm>Araliaceae</darfm>
<dargn>Aralia</dargn>
<darsn>Aralia apioides</darsn>
<comnm>qing ye long yan du he</comnm>
<mulmm0>
<mulmm>
<irn>10221626</irn>
</mulmm>
<mulmm>
<irn>10221629</irn>
</mulmm>
<mulmm>
<irn>10221631</irn>
</mulmm>
<mulmm>
<irn>10221633</irn>
</mulmm>
<mulmm>
<irn>10221636</irn>
</mulmm>
</mulmm0>
</recordname>">

<cfset myXML = XMLParse(myDoc)>

<cfset numRCItems = ArrayLen(myXML.recordname.XMLChildren)>
<cfset numMulmmItems = ArrayLen(myXML.recordname.mulmm0.XMLChildren)>

<cfset myQuery = QueryNew("irn, biols, biomd, catcn, catot, darfm, dargn, darsn, comnm") >
<cfset temp = QueryAddRow(myQuery, #numMulmmItems#)>

<cfloop index="i" from = "1" to = #numMulmmItems#>
    <cfset temp = QuerySetCell(myQuery, "irn", #myXML.recordname.mulmm0.mulmm[i].irn.XMLText#,#i#)>
        <cfloop index="j" from = "1" to = #numRCItems#>
            <cfif myXML.recordname.XMLChildren[j].XMLName IS NOT "mulmm0">
                <cfset temp = QuerySetCell(myQuery, myXML.recordname.XMLChildren[j].XMLName, #myXML.recordname.XMLChildren[j].XMLtext#,#i#)>    
            </cfif>
        </cfloop> 
</cfloop>

<cfdump var="#myQuery#" >

Upvotes: 2

Related Questions