Classic ASP遍历XML记录:如何获取所有记录的username与dbId
解决XML记录遍历问题:获取所有username和dbId
我来帮你搞定这个只能拿到第一条记录的问题!核心原因是你现在只取了索引为0的单个节点,要遍历所有记录,得先把返回的XML加载到DOM对象里,再用循环遍历所有匹配的节点。
先给你补全并修改后的完整代码,你可以根据自己实际的XML结构调整XPath路径:
Set http = Server.CreateObject("msxml2.ServerXMLHTTP.6.0") http.Open "GET", "http://URLWHERETHEXMLFILEISAT.COM", False, "USERNAME", "PASSWORD" http.setTimeouts 5000, 5000, 10000, 10000 'ms - resolve, connect, send, receive' http.setRequestHeader "Authorization", "你的授权头内容" '记得补全你的请求头信息 http.Send ' 先检查请求是否成功返回 If http.Status = 200 Then ' 创建XML DOM解析对象 Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.loadXML http.responseText '把接口返回的XML文本加载进来 ' 关键:用XPath获取所有记录节点,这里的路径要和你的XML结构匹配 ' 比如你的XML是<Root><Record><username>xxx</username><dbId>123</dbId></Record></Root>,就用//Record Set allRecords = xmlDoc.SelectNodes("//Record") ' 遍历每一条记录 For Each singleRecord In allRecords ' 提取当前记录的username和dbId Dim currentUsername, currentDbId If Not singleRecord.SelectSingleNode("username") Is Nothing Then currentUsername = singleRecord.SelectSingleNode("username").Text Else currentUsername = "无用户名" '处理节点不存在的情况 End If If Not singleRecord.SelectSingleNode("dbId") Is Nothing Then currentDbId = singleRecord.SelectSingleNode("dbId").Text Else currentDbId = "无DBID" End If ' 这里可以替换成你自己的业务逻辑,比如存储到数据库或者输出 Response.Write "用户名: " & currentUsername & " | DBID: " & currentDbId & "<br>" Next ' 用完记得释放对象,避免内存泄漏 Set allRecords = Nothing Set xmlDoc = Nothing Else Response.Write "请求失败,状态码: " & http.Status End If Set http = Nothing
几个关键注意点:
- XPath路径要匹配你的XML结构:比如如果你的记录节点叫
<User>而不是<Record>,就把//Record改成//User;如果节点有特定的命名空间,还要额外处理命名空间。 - 容错处理:加了
If Not ... Is Nothing的判断,避免因为某个节点缺失导致脚本报错。 - DOM对象的使用:必须把响应内容加载到
DOMDocument里,才能用SelectNodes和SelectSingleNode来查询节点。
内容的提问来源于stack exchange,提问作者compcobalt
相关产品推荐
相关产品推荐

