在 VBscript 中选择随机 XML 节点
Choosing a random XML node in VBscript
我一直无法弄清楚如何选择随机 xml 节点并将其文本值存储到变量中。我将在多个实例中使用该脚本,无论 XML 长度如何,它都需要工作。 XML 文件格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<file>file path 1</file>
<file>file path 2</file>
<file>file path 3</file>
我写的代码如下:
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.load("xmlfilepath")
x=xmlDoc.getElementsByTagName("file")
max = x.length
min=0
temp=(Int((max-min+1)*Rnd+min))
file = x[temp].nodeText
'do some things with the file path stored in the file variable.
我知道我做错了什么,但我不知道是什么。
在此先感谢你们能给我的任何帮助。
编辑:
我在第 7 行第 9 个字符出现错误。预期语句结束。
至于"title"我复制过来的时候没注意到是这样的。在我的代码中它是 "file"。我也在这次编辑中修复了它。但这不是我的问题。
在下一个脚本中,注释 '#1
..'#6
解释调试原始代码的步骤。所有(仅限调试)Wscript.Echo
语句都可以删除。
' VB Script Document: launch under cscript
option explicit
On Error Goto 0
Dim xmlDoc, x, max, min, file, temp, xLoad
'#5 Initialize the random-number generator
' otherwise Rnd function keeps return the same only value
randomize
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
'#1 ensure loading the document
xLoad = xmlDoc.load("D:\VB_scripts\SO\files_In285755.xml")
Wscript.Echo "parseError.errorCode " & xmlDoc.parseError.errorCode
If xLoad Then
'#3 invalid property assignment
' x=xmlDoc.getElementsByTagName("file")
set x=xmlDoc.getElementsByTagName("file")
' or ' set x = xmlDoc.documentElement.selectNodes("/title/file")
max = x.length
min=0
'#6 Object required: '[object]' error in line: file = x(temp).Text
' i.e. index out of bounds and zero based indexing and temp >= max
' temp=(Int((max-min+1)*Rnd+min))
temp=(Int((max-min)*Rnd+min))
Wscript.Echo "max", max, "temp", temp, "temp>=max", CStr(temp >= max)
'#4 Object doesn't support this property or method: 'nodeText'
' file = x(temp).nodeText
file = x(temp).Text
Else
'#2 descramble and resolve error in loading the document
' parseError.errorCode -1072896683
' parseError.reason Only one top level element is allowed in an XML document
' i.e. the root element missing: added <title>
Wscript.Echo "parseError.reason " & xmlDoc.parseError.reason
file = "N/A"
End If
Wscript.Echo file
我一直无法弄清楚如何选择随机 xml 节点并将其文本值存储到变量中。我将在多个实例中使用该脚本,无论 XML 长度如何,它都需要工作。 XML 文件格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<file>file path 1</file>
<file>file path 2</file>
<file>file path 3</file>
我写的代码如下:
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.load("xmlfilepath")
x=xmlDoc.getElementsByTagName("file")
max = x.length
min=0
temp=(Int((max-min+1)*Rnd+min))
file = x[temp].nodeText
'do some things with the file path stored in the file variable.
我知道我做错了什么,但我不知道是什么。
在此先感谢你们能给我的任何帮助。
编辑: 我在第 7 行第 9 个字符出现错误。预期语句结束。
至于"title"我复制过来的时候没注意到是这样的。在我的代码中它是 "file"。我也在这次编辑中修复了它。但这不是我的问题。
在下一个脚本中,注释 '#1
..'#6
解释调试原始代码的步骤。所有(仅限调试)Wscript.Echo
语句都可以删除。
' VB Script Document: launch under cscript
option explicit
On Error Goto 0
Dim xmlDoc, x, max, min, file, temp, xLoad
'#5 Initialize the random-number generator
' otherwise Rnd function keeps return the same only value
randomize
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
'#1 ensure loading the document
xLoad = xmlDoc.load("D:\VB_scripts\SO\files_In285755.xml")
Wscript.Echo "parseError.errorCode " & xmlDoc.parseError.errorCode
If xLoad Then
'#3 invalid property assignment
' x=xmlDoc.getElementsByTagName("file")
set x=xmlDoc.getElementsByTagName("file")
' or ' set x = xmlDoc.documentElement.selectNodes("/title/file")
max = x.length
min=0
'#6 Object required: '[object]' error in line: file = x(temp).Text
' i.e. index out of bounds and zero based indexing and temp >= max
' temp=(Int((max-min+1)*Rnd+min))
temp=(Int((max-min)*Rnd+min))
Wscript.Echo "max", max, "temp", temp, "temp>=max", CStr(temp >= max)
'#4 Object doesn't support this property or method: 'nodeText'
' file = x(temp).nodeText
file = x(temp).Text
Else
'#2 descramble and resolve error in loading the document
' parseError.errorCode -1072896683
' parseError.reason Only one top level element is allowed in an XML document
' i.e. the root element missing: added <title>
Wscript.Echo "parseError.reason " & xmlDoc.parseError.reason
file = "N/A"
End If
Wscript.Echo file