Skip to main content
markh21414623
Participating Frequently
Apr 7, 2016 1:26 PM UTC
Answered

How to check if a node exists in XML file?

  I have been asked to programme a method for importing data from xml files into our Coldfusion 8 website, I am new to using XML.

My method had been working however I encounted the following error:

Element NETWORKORDER.SECONDARYADDRESS.CONTACTNAME is undefined in MYDOC.

On investigation the node in the XML file was not present.

Is there a method I can use to resolve this error by checking if a node exists in the xml file,  that works with my current code below?

<!--- Read XML file --->
<cffile action="read" file="D:\website\XML\#FileName#" variable="myxml">
<cfset mydoc = XmlParse(myxml)>

<!--- Extract Data from NDS XML File --->
<cfset aPrimaryContactName=(#mydoc.NetworkOrder.PrimaryAddress.ContactName#)>
<cfset aPrimaryContactNumber=(#mydoc.NetworkOrder.PrimaryAddress.ContactNumber#)>
<cfset aPrimaryContactNumber= tostring(#mydoc.NetworkOrder.PrimaryAddress.ContactNumber#)>
<cfset aPrimaryContactAddressLine1=(#mydoc.NetworkOrder.PrimaryAddress.line1#)>
<cfset aPrimaryContactAddressLine2=(#mydoc.NetworkOrder.PrimaryAddress.line2#)>
<cfset aPrimaryContactAddressLine3=(#mydoc.NetworkOrder.PrimaryAddress.line3#)>
<cfset aPrimaryContactAddressLine4=(#mydoc.NetworkOrder.PrimaryAddress.line4#)>
<cfset aPrimaryContactAddressLine5=(#mydoc.NetworkOrder.PrimaryAddress.line5#)>
<cfset aPrimaryContactCity=(#mydoc.NetworkOrder.PrimaryAddress.City#)>
<cfset aPrimaryContactPostcode=(#mydoc.NetworkOrder.PrimaryAddress.PostalCode#)>
<cfset aPrimaryContactCounty=(#mydoc.NetworkOrder.PrimaryAddress.CountrySubdivision#)>
<cfset aPrimaryContactCountryCode=(#mydoc.NetworkOrder.PrimaryAddress.CountryCode#)>
<cfset aPrimaryContactCountry=(#mydoc.NetworkOrder.SecondaryAddress.Country#)>
<cfset aSecondaryContactName=(#mydoc.NetworkOrder.SecondaryAddress.ContactName#)>
<cfset aSecondaryAttentionOfName=(#mydoc.NetworkOrder.SecondaryAddress.AttentionOfName#)>
<cfset aSecondaryContactNumber=(#mydoc.NetworkOrder.SecondaryAddress.ContactNumber#)>
<cfset aSecondaryContactAddressLine1=(#mydoc.NetworkOrder.SecondaryAddress.line1#)>
<cfset aSecondaryContactAddressLine2=(#mydoc.NetworkOrder.SecondaryAddress.line2#)>
<cfset aSecondaryContactAddressLine3=(#mydoc.NetworkOrder.SecondaryAddress.line3#)>
<cfset aSecondaryContactAddressLine4=(#mydoc.NetworkOrder.SecondaryAddress.line4#)>
<cfset aSecondaryContactAddressLine5=(#mydoc.NetworkOrder.SecondaryAddress.line5#)>
<cfset aSecondaryContactCity=(#mydoc.NetworkOrder.SecondaryAddress.City#)>
<cfset aSecondaryContactPostcode=(#mydoc.NetworkOrder.SecondaryAddress.PostalCode#)>
<cfset aSecondaryContactCounty=(#mydoc.NetworkOrder.SecondaryAddress.CountrySubdivision#)>
<cfset aSecondaryContactCountryCode=(#mydoc.NetworkOrder.SecondaryAddress.CountryCode#)>
<cfset aSecondaryContactCountry=(#mydoc.NetworkOrder.SecondaryAddress.Country#)>

    This topic is closed to new replies. Start a new post to keep the conversation going.
    Steve SommersCorrect answer
    Legend
    Apr 8, 2016 1:03 AM UTC

    Since you already have the xml parsed into a document, the easiest is to use xmlSearch(). Take a look at the doc, it's pretty easy to use. Something as simple as:

        <cfset a = xmlSearch(mydoc,"//NetworkOrder/PrimaryAddress/ContactName" ) />

    To more complex like:

        <cfset a = xmlSearch(mydoc,"//*[local-name()='ContactName']" ) />

    And in either case:

        <cfif arrayLen(a)> <!--- something found ---> </cfif>

    Read the doc and google is your friend "coldfusion xmlsearch"

    2 replies

    Steve SommersCorrect answer
    Legend
    Apr 8, 2016 1:03 AM UTC

    Since you already have the xml parsed into a document, the easiest is to use xmlSearch(). Take a look at the doc, it's pretty easy to use. Something as simple as:

        <cfset a = xmlSearch(mydoc,"//NetworkOrder/PrimaryAddress/ContactName" ) />

    To more complex like:

        <cfset a = xmlSearch(mydoc,"//*[local-name()='ContactName']" ) />

    And in either case:

        <cfif arrayLen(a)> <!--- something found ---> </cfif>

    Read the doc and google is your friend "coldfusion xmlsearch"

    Translate
    markh21414623
    Participating Frequently
    Apr 8, 2016 2:05 PM UTC

    Thank you Steve for pointing me in the right direction. Somtimes when you google for information you can't see the forest for the trees.

    Your simple method works perfectly.

    <cfset a = xmlSearch(mydoc,"//NetworkOrder/PrimaryAddress/ContactName" ) />

    Translate