将 XML 字符串转换为 ASP 经典中的数组

Converting XML string into array in ASP classic

我正在尝试将表示 xml 的字符串转换为 ASP 经典中的数组。

我从另一个页面获取字符串,它包含 HTML 标签和 XML 标签。我正在剪切字符串并删除 XML 部分以外的任何内容,并将其作为 XML 文档加载。我的问题是遍历 XML 元素,当我尝试 运行 documentElement.SelectNodes 我的任何标签时,我收到以下错误:

Description:Object required: '[object]'

这是我的代码的一部分,以便理解:

XML字符串:

XmlString = XmlString & "<list> "
XmlString = XmlString & "<pax>"
XmlString = XmlString & "<base64>gdfgdf</base64><paxid>668</paxid> </pax> "
XmlString = XmlString & "<pax>"
XmlString = XmlString & "<base64>gfdgdfgdfg</base64> "
XmlString = XmlString & "<paxid>669</paxid> "
XmlString = XmlString & "</pax> "
XmlString = XmlString & "</list>"

response.Write XmlString

我的密码是

sURL = "http://someurl.com"

Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
xml.Open "GET", sURL, False
xml.setRequestHeader "Content-Type", "text/xml; charset=utf-8"  
xml.Send

resStr = xml.responseText
newstr = Mid(resStr, InStr(resStr, "<list>"), InStr(resStr, "</list>"))
response.Write newstr

Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.LoadXML(newstr)

'here is where I get the error (in any of those)
response.Write xmlDoc.DocumentElement.SelectNodes("//*")
xmlDoc.DocumentElement.SelectSingleNode("pax/").ChildNodes
xmlDoc.DocumentElement.GetElementsByTagName("paxid")

Mid 采用字符串、起始位置和长度。因此,当您构建 newstr 时,您应该这样做:

startAt = InStr(resStr, "<list>")
endAt = InStr(resStr, "</list>") + 7  ' to get to the end of the closing tag
newstr = Mid(resStr, startAt, endAt - startAt + 1)

应该进行大量错误检查以验证您要查找的开始和结束标记确实存在,但这解释了为什么您没有获得有效的 XML 文档.

编辑:

我假设这里的问题是 newstr 不包含有效的 XML 字符串,因为它的构造方式。这就是我解决的问题。在调查未记录的 downvote 时,我确定在 xmlDoc 对象的后续调用中存在其他问题。一旦你在那里得到一个好的 XML 文档,它就会更容易调试。

第一次调用 (SelectNodes) 失败,因为您试图写出对象的值,但是调用 returns 一个节点数组,response.write 无法写出任何内容做任何事情。

第二次调用 (SelectSingleNode) 由于某种参数问题而失败,如果您知道自己在做什么,很可能很容易解决该问题。

第三个调用 (GetElementsByTagName) 在您将我的更正应用于构建 newStr 的方式后工作正常。