Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at CFUNITED 2010 (Landsdown, VA) with: Adam Tuttle
Ben Nadel at CFUNITED 2010 (Landsdown, VA) with: Adam Tuttle@TuttleTree )

Getting The String Representation Of One ColdFusion XML Node

By Ben Nadel on
Tags: ColdFusion

I can't remember how this came up, but the other day I was talking to this girl about XML; it was a pretty engaging conversation, as you can probably well imagine. I was trying to explain the difference between a ColdFusion XML document object and an XML string when the question occurred to me - can you use ToString() to get a partial representation of an XML document object.

Traditionally, you can call ToString() on an entire ColdFusion XML document to get an XML string representation:

  • #ToString( xmlDocumentObject )#

But, what about calling that on an individual XML node that is within the XML document. I gave it a go:

  • <!--- Define our ColdFusion XML document object. --->
  • <cfxml variable="xmlGirls">
  • <girls>
  • <girl>
  • <name>Samantha</name>
  • <age>27</age>
  • <hair>Blonde</hair>
  • </girl>
  • <girl>
  • <name>Kim</name>
  • <age>32</age>
  • <hair>Brunette</hair>
  • </girl>
  • <girl>
  • <name>Cindi</name>
  • <age>25</age>
  • <hair>Black</hair>
  • </girl>
  • </girls>
  • </cfxml>
  • <!--- Get the third girl. --->
  • <cfset arrNodes = XmlSearch( xmlGirls, "//girl[ 3 ]" ) />
  • <!--- Get a pointer to the girl node. --->
  • <cfset xmlGirl = arrNodes[ 1 ] />
  • <!---
  • Output the string representation of JUST this node
  • taken from the XML document.
  • --->
  • #HtmlEditFormat(
  • ToString( xmlGirl )
  • )#

As you can see, we are calling ColdFusion's ToString() method on only the third girl element node in the XML document. Running this gives us the following output:

  • <?xml version="1.0" encoding="UTF-8"?>
  • <girl>
  • <name>Cindi</name>
  • <age>25</age>
  • <hair>Black</hair>
  • </girl>

Pretty cool! Not only did it give us the string representation of the single XML node, it also gave us the XML document type.

NOTE: I modified the tabbing of the outputted string for easier reading.

Looking For A New Job?

Ooops, there are no jobs. Post one now for only $29 and own this real estate!

100% of job board revenue is donated to Kiva. Loans that change livesFind out more »

Reader Comments

Hi Ben, do you know of an easy way to strip the XML declaration or to get the string representation without the XML declaration?

I did this:

<cfset xmlString = ToString(xmlNode)>
<cfif xmlString contains "<?xml">
<cfset xmlString=ListDeleteAt(xmlString ,1,">")>
<cfset xmlString=Right(xmlString ,Len(xmlString )-1)>

It's ugly, but it seems to do the trick.


You can use a regular expression (regEx) to remove the declaration:

XmlString = REReplace( XmlString, "<\?xml[^>]*>", "", "one" )

Instead of

<cfset arrNodes = XmlSearch( xmlGirls, "//girl[ 3 ]" ) />
<!--- Get a pointer to the girl node. --->
<cfset xmlGirl = arrNodes[ 1 ] />


<cfset xmlGirl = XmlSearch( xmlGirls, "//girl[ 3 ]" ) [1]/>