XmlSearch

Description

Uses an XPath language expression to search an XML document object.

Returns

The results of the XPath search. For details, see Usage.

Category

XML functions

Function syntax

XmlSearch(xmlDoc, xPathString)

See also

cfxml, IsXML, XmlChildPos, XmlParse, XmlTransform; Using XML and WDDX in the Developing ColdFusion Applications

History

ColdFusion 8: Added support for returning any valid XPath result, not just arrays of XML object nodes.

ColdFusion MX 7: Added support for attribute searches.

ColdFusion MX: Added this function.

Parameters

Parameter

Description

xmlDoc

XML document object

xPathString

XPath expression

Usage

The XmlSearch function attempts to return the values returned by the search whenever possible. For example, if the XPath expression returns a Boolean, the CFML variable is assigned a true or false value.

The following table lists XPath expression result data types and how they are represented in the CFML return value.

XPath return type

ColdFusion representation

Boolean

Boolean

Null

"" (empty string)

Number

Number

String

String

NodeSet

Array of XML nodes

Result Tree Fragment

Array of XML nodes

Results that are Unknown or have an unresolved variable in the expression throw an error.

XPath is specified by the World Wide Web Consortium (W3C). For detailed information on XPath, including XPath expression syntax, see the W3C website at www.w3.org/TR/xpath.

Example

The following example extracts the elements named last, which contain employee last names, from an XML file, and displays the names.

The employeesimple.xml file contains the following XML:

<?xml version="1.0" encoding="UTF-8"?> 
<employee> 
<!-- A list of employees --> 
    <name EmpType="Regular"> 
<first>Almanzo</first> 
<last>Wilder</last> 
    </name> 
    <name EmpType="Contract"> 
<first>Laura</first> 
<last>Ingalls</last> 
    </name> 
</employee>

The CFML file contains the following lines:

<cfscript> 
    myxmldoc = XmlParse("C:\CFusionMX7\wwwroot\examples\employeesimple.xml"); 
    selectedElements = XmlSearch(myxmldoc, "/employee/name/last"); 
    for (i = 1; i LTE ArrayLen(selectedElements); i = i + 1) 
        writeoutput(selectedElements[i].XmlText & "<br>"); 
</cfscript>