【问题标题】:Converting XML string into array in ASP classic在 ASP 经典中将 XML 字符串转换为数组
【发布时间】:2018-06-14 11:54:40
【问题描述】:

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

我正在从另一个页面获取字符串,它包含 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")

【问题讨论】:

  • 我怀疑newstr 不包含有效的XML 字符串。该变量的值是多少?放在xmlDoc.LoadXML(newstr) 之后的行response.Write xmlDoc.ParseError 的输出是什么?

标签: xml vbscript asp-classic


【解决方案1】:

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) 失败,因为您试图写出对象的值,但调用返回一个节点数组,response.write 无能为力。

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

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

【讨论】:

  • 谢谢,问题出在子字符串上。我按照您的建议更改了它,现在效果很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
相关资源
最近更新 更多