繁体   English   中英

经典ASP错误变量未定义

[英]Classic ASP error Variable not Defined

我试图执行下面提供的经典ASP代码下的For Each Next循环。

For Each node in xml.SelectSingleNode("/Root/Div").ChildNodes
 response.write node.SelectSingleNode("item").text
Next

但是我接收错误了

变量未定义'节点',800a01f4

我想要处理的XML如下所示

<Root>
  <div>
   <div><item>I1</item></div>
   <div><item>I2</item></div>
   <div><item>I3</item></div>
   <div><item>I4</item></div>
  </div>
</Root>

解决这个问题:

Option Explicit

Dim sXML : sXML = Join(Array( _
    "<Root>" _
   , "<div>" _
   ,   "<div><item>I2</item></div>" _
   ,   "<div><item>I1</item></div>" _
   ,   "<div><item>I3</item></div>" _
   ,   "<div><item>I4</item></div>" _
   ,  "</div>" _
   , "</Root>"))
Dim oXML : Set oXML = CreateObject("MSXML.DOMDOCUMENT")
oXML.loadXML sXML
Dim oNode ' Uncomment to get: Variable ist nicht definiert: 'oNode'
' try "/Root/Div" or "/Root/Div/div" or "/Root/div" to realize why those are
' bad XPath expressions given your "/Root/div/div/item" structure
For Each oNode In oXML.SelectNodes("/Root/div/div")
    WScript.Echo oNode.tagName, oNode.firstChild.tagName, oNode.firstChild.text
Next
' For Each iterates over a collection; .SelectSingleNode returns
' a single node (surprise, surprise)

输出:

cscript 43737831.vbs
div item I2
div item I1
div item I3
div item I4

了解哪些错误导致了哪些问题。

你在正确的轨道上刚刚发现我们在评论中讨论过的一些错误。

在意识到 Option Explicit被设置在未显示的代码中的某个位置后,修复就是添加

Dim node

下一个错误是一个简单的修复和一个非常常见的错误。

对象必需:'node.selectSingleNode(..)

node对象不是对象,因为xml.SelectSingleNode("/Root/Div").ChildNodes调用永远不会返回一个。 发生这种情况是因为XPath字符串不正确,需要完全遵循XML结构,以及元素中定义的任何情况。

下面是一个基于您的代码的示例,但只是为了使示例工作,但我怀疑只是更改XPath

/Root/Div

/Root/div

会解决这个问题。

<%
Option Explicit

Dim xml_data : xml_data = Join( _
  Array( _
    "<Root>" _
    , "<div>" _
    ,   "<div><item>I2</item></div>" _
    ,   "<div><item>I1</item></div>" _
    ,   "<div><item>I3</item></div>" _
    ,   "<div><item>I4</item></div>" _
    ,  "</div>" _
    , "</Root>") _
  )

Dim xml : Set xml = Server.CreateObject("Microsoft.XMLDOM")
Dim node

Call xml.LoadXML(xml_data)

For Each node In xml.SelectSingleNode("/Root/div").ChildNodes
  Call Response.Write(node.SelectSingleNode("item").Text & "<br />")
Next
%>

输出:

I2
I1
I3
I4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM