Classic ASP编写XML时,如何用变量替换代码中的固定值'1'
如何将Classic ASP代码中的固定数值'1'替换为变量并实现循环创建XML节点?
需求说明
现有一段Classic ASP创建XML节点的代码,其中变量名带固定数值1(如objorderline1),需要将其替换为变量,实现循环遍历数据库产品表,为每个产品生成独立的OrderLine XML节点,参考给定的数组变量写法。
原代码:
Set objorderline1 = objXML.createElement("OrderLine") Set objorderline1att = objXML.createAttribute("xmlns") objorderline1att.text = "" objorderline1.setAttributeNode objorderline1att objorder.appendChild objorderline1
参考的数组变量写法:
Set objlinenumber(linenumber) = objXML.createElement("LineNumber") objlinenumber(linenumber).text = linenumber objorderline(linenumber).appendChild objlinenumber(linenumber) Set objproduct(linenumber) = objXML.createElement("Product")
解决方案
核心是用数组变量替代带固定数字的变量名,配合数据库循环遍历逻辑,每次循环生成一个独立的OrderLine节点。以下是完整实现示例:
' 1. 初始化XML对象 Set objXML = Server.CreateObject("MSXML2.DOMDocument.6.0") objXML.async = False objXML.validateOnParse = False ' 假设已创建好父节点objorder(比如先创建根节点后得到) Set objorder = objXML.createElement("Order") objXML.appendChild objorder ' 2. 连接数据库并读取产品表 Set conn = Server.CreateObject("ADODB.Connection") conn.Open "你的数据库连接字符串" Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM 产品表", conn, 1, 1 ' 3. 初始化循环计数器 Dim linenumber linenumber = 1 ' 4. 循环遍历产品记录,创建OrderLine节点 Do While Not rs.EOF ' 创建当前产品的OrderLine节点(用数组变量存储) Set objorderline(linenumber) = objXML.createElement("OrderLine") ' 为OrderLine节点设置xmlns属性 Set objorderlineatt = objXML.createAttribute("xmlns") objorderlineatt.text = "" objorderline(linenumber).setAttributeNode objorderlineatt ' 将当前OrderLine节点添加到父节点objorder objorder.appendChild objorderline(linenumber) ' ------------------------------ ' 可选:参考示例添加子节点(如LineNumber、Product等) Set objlinenumber(linenumber) = objXML.createElement("LineNumber") objlinenumber(linenumber).text = linenumber objorderline(linenumber).appendChild objlinenumber(linenumber) Set objproduct(linenumber) = objXML.createElement("Product") ' 从数据库读取产品信息赋值,比如产品名称 objproduct(linenumber).text = rs("产品名称") objorderline(linenumber).appendChild objproduct(linenumber) ' ------------------------------ ' 计数器自增,准备下一条记录 linenumber = linenumber + 1 rs.MoveNext Loop ' 清理资源 rs.Close Set rs = Nothing conn.Close Set conn = Nothing
关键说明
- 使用数组变量
objorderline(linenumber)替代固定命名的objorderline1,每个循环迭代对应一个独立的节点对象 - 循环计数器
linenumber从1开始,每次循环后自增,确保每个节点的数组索引唯一 - 在循环内部可以继续扩展逻辑,比如从数据库读取产品字段,填充到子节点中
- 注意提前声明数组相关变量,避免运行时错误
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

