2015-03-26 1 views
0

J'ai eu du mal à trouver comment choisir un nœud xml aléatoire et stocker sa valeur de texte dans une variable. Je vais utiliser le script dans plusieurs instances et il devra fonctionner quelle que soit la longueur XML. Le fichier XML est formaté comme ceci:Choix d'un nœud XML aléatoire dans VBScript

<?xml version="1.0" encoding="utf-8" ?> 
    <file>file path 1</file> 
    <file>file path 2</file> 
    <file>file path 3</file> 

Le code que je l'ai écrit comme suit:

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. 

Je sais que je fais quelque chose de mal, mais je ne sais pas quoi.

Merci d'avance pour toute aide que vous pouvez me donner.

EDIT: Je reçois une erreur sur la ligne 7 char 9. attendu la fin de l'instruction. En ce qui concerne le "titre", je n'ai pas remarqué que c'était comme ça quand je l'ai copié là-bas. Dans mon code c'est "fichier". Je l'ai également corrigé dans cette édition. mais cela ne faisait pas partie de mon problème.

+0

1. Qu'est-ce que cela signifie? C'est un terme trop général, donc nous ne pouvons que le deviner. Un message d'erreur? Ou un comportement inattendu? 2. Je ne vois pas de balise nommée '' title ''dans votre fichier' xml'. – JosefZ

+0

Modifier '[' entre crochets'] '' ('parenthèses')', mais c'est une erreur de syntaxe seulement; plus à déboguer rester ... – JosefZ

Répondre

0

Dans le script suivant, les commentaires '#1 .. '#6 expliquent les étapes pour déboguer votre code d'origine. Toutes les instructions (débogage uniquement) Wscript.Echo ont pu être supprimées.

' 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_In\29285755.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 
+0

Merci beaucoup! Le code d'erreur a aidé une tonne. Était capable de comprendre que mon XML avait besoin d'une balise de haut niveau qui contenait les balises de fichier. Merci de m'avoir fait savoir à propos de "randomiser" et de corriger la ligne fichier = x (temp) .text avait cette ligne tout foiré. – wisky