ColdFusion原生支持XML处理,核心是创建/解析结构及读写内容与属性;可用cfxml标签定义静态XML或xmlNew()动态构建,读取用xmlParse(),修改后toString()保存,务必用xmlFormat()转义和charset="utf-8"编码。

ColdFusion 处理和生成 XML 很直接,核心就两件事:创建/解析结构 + 读写内容与属性。不用额外库,原生支持足够应付大多数场景,比如导出数据、对接 API(如 QuickBooks)、动态配置或图片列表管理。
用 cfxml 标签快速定义静态 XML
适合结构固定、内容简单的情况,比如模板化片段或测试数据。直接写 XML 字符串,自动解析为 ColdFusion XML 对象:
<cfxml variable="myxml"><br> <root><br> <person id="1"><br> <name>John Doe</name><br> <email>john@example.com</email><br> </person><br> </root><br></cfxml>
变量 myxml 就是可操作的 XML 对象,后续能用点语法访问节点,比如 myxml.root.person[1].name.xmltext。
用 xmlNew() + xmlElemNew() 动态构建 XML
适合从数据库查数据、循环生成节点,或者需要灵活控制属性和嵌套层级。关键步骤:新建文档 → 设根节点 → 创建子节点 → 设置文本/属性 → 追加到父节点。
-
<cfset doc = xmlNew()>创建空 XML 文档 -
<cfset doc.xmlRoot = xmlElemNew(doc, "body")>指定根元素 -
<cfset item = xmlElemNew(doc, "title")>新建子节点 -
<cfset item.xmlAttributes.id = "BK101">添加属性 -
<cfset item.xmlText = xmlFormat("XML 入门指南")>写文本内容(务必用 xmlFormat 防止特殊字符破坏格式) -
<cfset arrayAppend(doc.xmlRoot.xmlChildren, item)>把节点加进根下
循环数据库查询结果时,就在这套逻辑里套 for 循环,每条记录生成一个节点。
读取和修改已有 XML 文件
常见于维护配置文件、图片列表或响应外部 XML 接口。先用 <cffile action="read"> 或 <cfset xmlObj = xmlParse(filePath)> 加载文件。
然后可以:
- 用点语法定位节点:
xmlObj.imgList.list[1].xmlAttributes.path - 用
xmlSearch(xmlObj, "//list")查所有 list 节点(XPath 支持基础路径) - 修改属性或文本后,用
toString(xmlObj)转成字符串 - 再用
<cffile action="write">保存回去
注意:ColdFusion 的 XML 对象是“活”的,改了属性或子节点,toString() 就会反映最新结构。
输出和编码细节不能漏
生成的 XML 如果含中文、引号、& 等,不处理会解析失败。
- 所有用户输入或数据库字段,写入前过一遍
xmlFormat() - 写文件时指定
charset="utf-8",比如:<cffile action="write" charset="utf-8" ...> - 如果要浏览器直接查看 XML,加一句:
<cfcontent type="text/xml">
遇到 “解析失败:输入不正确,UTF-8” 错误,八成是源数据混了 Windows-1252 字符(比如 Word 粘贴的破折号),得先清理或强制转码。
基本上就这些。不复杂但容易忽略 xmlFormat 和 charset,踩过坑就知道它们多关键。










