[COLOR=#0000ff]'get XML into string[/color]
xml_string [COLOR=#804040][b]=[/b][/color] file2str[COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"example.xml"[/color][COLOR=#804040][b])[/b][/color]
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"* Original xml_string = '"[/color] [COLOR=#804040][b]&[/b][/color] xml_string [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]"'"[/color]
wscript[COLOR=#804040][b].[/b][/color]echo out_line
wscript[COLOR=#804040][b].[/b][/color]echo
[COLOR=#0000ff]'transform string into normal XML[/color]
xml_string [COLOR=#804040][b]=[/b][/color] normalize_XML[COLOR=#804040][b]([/b][/color]xml_string[COLOR=#804040][b])[/b][/color]
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"* Normalized xml_string = '"[/color] [COLOR=#804040][b]&[/b][/color] xml_string [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]"'"[/color]
wscript[COLOR=#804040][b].[/b][/color]echo out_line
wscript[COLOR=#804040][b].[/b][/color]echo
[COLOR=#0000ff]'parse normal XML[/color]
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"* Now parsing XML:"[/color]
wscript[COLOR=#804040][b].[/b][/color]echo out_line
[COLOR=#804040][b]set[/b][/color] xml_doc [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]CreateObject[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"Microsoft.XMLDOM"[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff]'load XML from string[/color]
xml_doc[COLOR=#804040][b].[/b][/color]loadXML[COLOR=#804040][b]([/b][/color]xml_string[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff]'create list of <entry> elements[/color]
[COLOR=#804040][b]set[/b][/color] node_list [COLOR=#804040][b]=[/b][/color] xml_doc[COLOR=#804040][b].[/b][/color]getElementsByTagName[COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"entry"[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]if[/b][/color] node_list[COLOR=#804040][b].[/b][/color]length [COLOR=#804040][b]>[/b][/color] [COLOR=#ff00ff]0[/color] [COLOR=#804040][b]then[/b][/color]
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"Number of entries found: "[/color] [COLOR=#804040][b]&[/b][/color] node_list[COLOR=#804040][b].[/b][/color]length
wscript[COLOR=#804040][b].[/b][/color]echo out_line
[COLOR=#804040][b]for[/b][/color] [COLOR=#804040][b]each[/b][/color] entry [COLOR=#804040][b]in[/b][/color] node_list
[COLOR=#0000ff] 'parse each element childs[/color]
string_num [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]for[/b][/color] [COLOR=#804040][b]each[/b][/color] child [COLOR=#804040][b]in[/b][/color] entry[COLOR=#804040][b].[/b][/color]ChildNodes
[COLOR=#804040][b]if[/b][/color] child[COLOR=#804040][b].[/b][/color]NodeName [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"string"[/color] [COLOR=#804040][b]then[/b][/color]
string_num [COLOR=#804040][b]=[/b][/color] string_num [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]select[/b][/color] [COLOR=#804040][b]case[/b][/color] string_num
[COLOR=#804040][b]case[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#0000ff] 'parse 1.string into variable name[/color]
var_name [COLOR=#804040][b]=[/b][/color] child[COLOR=#804040][b].[/b][/color]Text
[COLOR=#804040][b]case[/b][/color] [COLOR=#ff00ff]2[/color]
[COLOR=#0000ff] 'parse 2.string into variable value[/color]
var_value [COLOR=#804040][b]=[/b][/color] child[COLOR=#804040][b].[/b][/color]Text
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]select[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]if[/b][/color]
[COLOR=#804040][b]next[/b][/color]
[COLOR=#0000ff] 'write the variable and value[/color]
out_line [COLOR=#804040][b]=[/b][/color] var_name [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]" = "[/color] [COLOR=#804040][b]&[/b][/color] var_value
wscript[COLOR=#804040][b].[/b][/color]echo out_line
[COLOR=#804040][b]next[/b][/color]
wscript[COLOR=#804040][b].[/b][/color]echo [COLOR=#ff00ff]"...Done."[/color]
[COLOR=#804040][b]else[/b][/color]
err_msg [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]chr[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]34[/color][COLOR=#804040][b])[/b][/color] [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]"entry"[/color] [COLOR=#804040][b]&[/b][/color] [COLOR=#008080]chr[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]34[/color][COLOR=#804040][b])[/b][/color] [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]" tag not found !"[/color]
wscript[COLOR=#804040][b].[/b][/color]echo[COLOR=#804040][b]([/b][/color]err_msg[COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]if[/b][/color]
[COLOR=#0000ff]'at end release objects from memory[/color]
[COLOR=#804040][b]set[/b][/color] xml_doc [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]nothing[/b][/color]
[COLOR=#804040][b]set[/b][/color] node_list [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]nothing[/b][/color]
[COLOR=#0000ff]'----------------------- functions ------------------------[/color]
[COLOR=#804040][b]function[/b][/color] file2str[COLOR=#804040][b]([/b][/color]fname[COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]set[/b][/color] oFSO [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]CreateObject[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"Scripting.FileSystemObject"[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] 'open the input file[/color]
[COLOR=#804040][b]set[/b][/color] oInFile [COLOR=#804040][b]=[/b][/color] oFSO[COLOR=#804040][b].[/b][/color]OpenTextFile[COLOR=#804040][b]([/b][/color]fname[COLOR=#804040][b])[/b][/color]
file2str [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]""[/color]
[COLOR=#0000ff] 'for each line in the input file[/color]
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] [COLOR=#804040][b]not[/b][/color] oInFile[COLOR=#804040][b].[/b][/color]AtEndOfStream
[COLOR=#0000ff] 'read the line and concatenate it with others[/color]
file2str [COLOR=#804040][b]=[/b][/color] file2str [COLOR=#804040][b]&[/b][/color] oInFile[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]ReadLine[/color][COLOR=#804040][b]()[/b][/color]
[COLOR=#804040][b]loop[/b][/color]
[COLOR=#0000ff] 'close the input file[/color]
oInFile[COLOR=#804040][b].[/b][/color][COLOR=#804040][b]close[/b][/color]
[COLOR=#0000ff] 'at end release object from memory[/color]
[COLOR=#804040][b]set[/b][/color] oFSO [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]nothing[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]function[/b][/color]
[COLOR=#804040][b]function[/b][/color] normalize_XML[COLOR=#804040][b]([/b][/color]xml_str[COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]set[/b][/color] re [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]createobject[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"vbscript.regexp"[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] '1. replacement: create beginning of tag <numstrings>[/color]
re[COLOR=#804040][b].[/b][/color]pattern [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"^<hashtable>\s*<entry>\s*<string>"[/color]
replace_with [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"<numstrings>"[/color]
xml_str [COLOR=#804040][b]=[/b][/color] re[COLOR=#804040][b].[/b][/color][COLOR=#008080]Replace[/color][COLOR=#804040][b]([/b][/color]xml_str[COLOR=#804040][b],[/b][/color] replace_with[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] '2. replacement: create end of tag </numstrings>[/color]
re[COLOR=#804040][b].[/b][/color]pattern [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"<\/string>\s*<hashtable>"[/color]
replace_with [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"</numstrings>"[/color]
xml_str [COLOR=#804040][b]=[/b][/color] re[COLOR=#804040][b].[/b][/color][COLOR=#008080]Replace[/color][COLOR=#804040][b]([/b][/color]xml_str[COLOR=#804040][b],[/b][/color] replace_with[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] '3. replacement: create beginning of root node <hashtable_root>[/color]
re[COLOR=#804040][b].[/b][/color]pattern [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"^^\s*"[/color]
replace_with [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"<hashtable_root>"[/color]
xml_str [COLOR=#804040][b]=[/b][/color] re[COLOR=#804040][b].[/b][/color][COLOR=#008080]Replace[/color][COLOR=#804040][b]([/b][/color]xml_str[COLOR=#804040][b],[/b][/color] replace_with[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] '4. replacement: : create end of root node </hashtable_root>[/color]
re[COLOR=#804040][b].[/b][/color]pattern [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"\s*$"[/color]
replace_with [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"</hashtable_root>"[/color]
xml_str [COLOR=#804040][b]=[/b][/color] re[COLOR=#804040][b].[/b][/color][COLOR=#008080]Replace[/color][COLOR=#804040][b]([/b][/color]xml_str[COLOR=#804040][b],[/b][/color] replace_with[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] 'return modified string[/color]
normalize_XML [COLOR=#804040][b]=[/b][/color] xml_str
[COLOR=#0000ff] 'at end release object from memory[/color]
[COLOR=#804040][b]set[/b][/color] re [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]nothing[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]function[/b][/color]