在ASP classic中将XML字符串转换为数组

时间:2018-06-14 11:54:40

标签: xml vbscript asp-classic

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

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

  

描述:需要的对象:'[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")

1 个答案:

答案 0 :(得分:0)

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文档。< / p>

编辑:

我认为这里的问题是newstr由于构造方式不包含有效的XML字符串这一事实。这就是我解决的问题。在调查未记录的downvote时,我确定在随后调用xmlDoc对象时还有其他问题。一旦你在那里得到一个好的XML文档,它将更容易调试。

第一个调用(SelectNodes)失败,因为您尝试写出对象的值,但调用返回一个节点数组,response.write无法执行任何操作。

第二次调用(SelectSingleNode)因参数的某些问题而失败,如果您知道自己正在做什么,该参数可能很容易修复。

第三次调用(GetElementsByTagName)一旦您将修正应用于构建newStr的方式,就可以正常工作。