在ColdFusion开发中,XML是常用的数据交换格式之一,平台提供了原生的标签和函数支持XML的全流程处理,无需依赖第三方库就能完成大部分XML相关操作。

ColdFusion解析XML数据
解析XML是最常见的操作,ColdFusion提供了XmlParse()函数,可以将XML字符串或者XML文件转换为可操作的XML对象。
解析XML字符串
如果接收到的是XML格式的字符串,直接使用XmlParse()解析即可:
<!--- 定义XML字符串 --->
<cfsavecontent variable="xmlStr">
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>1001</id>
<name>张三</name>
<age>25</age>
<hobbies>
<hobby>阅读</hobby>
<hobby>运动</hobby>
</hobbies>
</user>
</cfsavecontent>
<!--- 解析XML字符串 --->
<cfset xmlObj = XmlParse(xmlStr) />
<!--- 输出解析后的节点内容 --->
<cfoutput>
用户ID:#xmlObj.user.id.xmlText#<br/>
用户姓名:#xmlObj.user.name.xmlText#<br/>
用户年龄:#xmlObj.user.age.xmlText#<br/>
第一个爱好:#xmlObj.user.hobbies.hobby[1].xmlText#<br/>
</cfoutput>
解析XML文件
如果是本地或者远程的XML文件,同样可以使用XmlParse()解析,只需要传入文件路径即可:
<!--- 解析本地XML文件,假设文件存放在项目根目录的data文件夹下 --->
<cfset xmlObj = XmlParse(expandPath("/data/user_info.xml")) />
<!--- 解析远程XML文件 --->
<cfset remoteXmlObj = XmlParse("http://ipipp.com/api/user.xml") />
ColdFusion生成XML数据
生成XML有两种常用方式,一种是手动拼接XML字符串,另一种是使用cfxml标签或者XML对象动态构建,后者更推荐,能避免语法错误。
使用cfxml标签生成XML
cfxml标签是ColdFusion内置的用于生成XML的标签,可以直接在标签内编写XML结构,还支持嵌入CFML变量:
<!--- 定义动态变量 --->
<cfset userId = 1002 />
<cfset userName = "李四" />
<cfset userAge = 28 />
<!--- 使用cfxml生成XML --->
<cfxml variable="newXml">
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>#userId#</id>
<name>#userName#</name>
<age>#userAge#</age>
<create_time>#now()#</create_time>
</user>
</cfxml>
<!--- 输出生成的XML内容 --->
<cfoutput>#toString(newXml)#</cfoutput>
使用XML对象动态构建XML
如果需要动态添加节点、处理复杂的层级关系,可以先创建根节点,再逐步添加子节点:
<!--- 创建XML根节点 ---> <cfset rootNode = XmlNew() /> <cfset rootNode.xmlName = "users" /> <!--- 添加第一个用户节点 ---> <cfset user1 = XmlElemNew(rootNode, "user") /> <cfset id1 = XmlElemNew(rootNode, "id") /> <cfset id1.xmlText = "1003" /> <cfset user1.xmlChildren = [id1] /> <cfset name1 = XmlElemNew(rootNode, "name") /> <cfset name1.xmlText = "王五" /> <cfset ArrayAppend(user1.xmlChildren, name1) /> <!--- 添加第二个用户节点 ---> <cfset user2 = XmlElemNew(rootNode, "user") /> <cfset id2 = XmlElemNew(rootNode, "id") /> <cfset id2.xmlText = "1004" /> <cfset user2.xmlChildren = [id2] /> <cfset name2 = XmlElemNew(rootNode, "name") /> <cfset name2.xmlText = "赵六" /> <cfset ArrayAppend(user2.xmlChildren, name2) /> <!--- 将用户节点添加到根节点 ---> <cfset rootNode.xmlChildren = [user1, user2] /> <!--- 输出生成的XML ---> <cfoutput>#toString(rootNode)#</cfoutput>
XML常见操作示例
修改XML节点内容
解析后的XML对象可以直接修改节点的xmlText属性来更新内容:
<!--- 解析之前的XML字符串 --->
<cfsavecontent variable="xmlStr">
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>1001</id>
<name>张三</name>
<age>25</age>
</user>
</cfsavecontent>
<cfset xmlObj = XmlParse(xmlStr) />
<!--- 修改年龄节点内容 --->
<cfset xmlObj.user.age.xmlText = "26" />
<cfoutput>修改后的年龄:#xmlObj.user.age.xmlText#</cfoutput>
遍历XML子节点
如果XML存在多个同层级的子节点,可以通过数组遍历的方式处理:
<cfsavecontent variable="xmlStr">
<?xml version="1.0" encoding="UTF-8"?>
<user>
<hobbies>
<hobby>阅读</hobby>
<hobby>运动</hobby>
<hobby>音乐</hobby>
</hobbies>
</user>
</cfsavecontent>
<cfset xmlObj = XmlParse(xmlStr) />
<cfset hobbyList = xmlObj.user.hobbies.hobby />
<cfoutput>
<ul>
<cfloop from="1" to="#arrayLen(hobbyList)#" index="i">
<li>爱好#i#:#hobbyList[i].xmlText#</li>
</cfloop>
</ul>
</cfoutput>
注意事项
- 解析XML时如果出现格式错误,
XmlParse()会抛出异常,建议使用try-catch包裹解析逻辑,处理异常情况。 - 生成的XML如果需要设置声明头,比如编码、版本信息,使用
cfxml标签时可以直接在标签内编写,使用XML对象构建时需要手动设置xmlRoot的相关属性。 - 如果XML中包含特殊字符,比如
<、>、&,需要进行转义,避免解析错误,ColdFusion的XmlFormat()函数可以自动完成特殊字符的转义。 - 操作大体积的XML文件时,建议分片段处理,避免占用过多内存导致性能问题。
ColdFusionXML处理XML生成cfxml修改时间:2026-06-24 03:48:29