经典 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
但我收到错误
Variable Not Defined 'node', 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
下一个错误是一个简单的修复和一个非常常见的错误。
Object Required: '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
我正在尝试在经典 ASP 代码下执行下面提供的 For Each Next 循环。
For Each node in xml.SelectSingleNode("/Root/Div").ChildNodes
response.write node.SelectSingleNode("item").text
Next
但我收到错误
Variable Not Defined 'node', 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
下一个错误是一个简单的修复和一个非常常见的错误。
Object Required: '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