我正在尝试将表示 xml 的字符串转换为 ASP 经典中的数组。
我从另一个页面获取字符串,它包含 HTML 标记以及 XML 标记。我正在剪切字符串并删除除 XML 部分以外的任何内容,并将其作为 XML 文档加载。我的问题是遍历XML元素,当我尝试使用任何标签运行documentElement.SelectNodes
时,出现以下错误:
说明:所需对象:"[对象]">
这是我代码的一部分,以便理解:
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 字符串。这就是我解决的问题。在调查未记录的反对票时,我确定随后调用xmlDoc
对象还有其他问题。一旦你在那里得到了一个好的XML文档,调试起来就会更容易。
第一次调用(SelectNodes
(失败,因为您尝试写出对象的值,但调用返回一个节点数组,response.write
无法执行任何操作。
第二次调用(SelectSingleNode
(由于参数的某种问题而失败,如果您知道自己在做什么,则可能很容易修复。
第三次调用(GetElementsByTagName
(一旦您将我的更正应用于构建方式newStr
就可以正常工作。