我有一个VBScript,它从c:驱动器中选择一个文件并从XML文件上的标签中获取信息,但我希望用户能够从对话框中选择文件,但我似乎无法完成它,这是我的剧本:
Dim xmlDoc, objNodeList, plot, fin
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.load("C:\Users\User\Documents\vbscript\mlb.xml")
Set objNodeList = xmlDoc.getElementsByTagName("league")
Set objFSO=CreateObject("Scripting.FileSystemObject")
' Create file
outFile= "C:\Users\User\Documents\vbscript\Leagues.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
If objNodeList.length > 0 then
For each x in objNodeList
plot= x.getAttribute("name")
'Write to File
objFile.Write plot & vbCrLf
Next
Else
msgbox " field not found."
End If
objFile.Close
任何帮助将不胜感激。
答案 0 :(得分:2)
对于Windows XP,您可以使用UserAccounts.CommonDialog
对象,请参阅文档以获取更多详细信息,但简而言之,它是这样的:
Set dlg = CreateObject("UserAccounts.CommonDialog")
dlg.InitialDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
dlg.Filter = "XML files|*.xml"
If dlg.ShowOpen <> 0 Then
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.load(dlg.FileName)
' Your code
End If
请注意,我还使用WScript.Shell
对象来获取用户的文档文件夹(因此您不必对其进行硬编码)。我建议对输出文件做同样的事情。
不幸的是,此对象已在Windows 7中删除(可能是因为安全问题),那么您必须使用其他内容。有很多候选人,让我们看看其中的一些。
更简单的方法是使用comdlg32.dll
,如下所示:
Set dlg = CreateObject("MSComDlg.CommonDialog.1")
dlg.InitialDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
dlg.Filter = "XML files|*.xml"
此DLL似乎未在每个系统上注册,如果是这种情况,则必须在c:\ windows \ system32中download it并使用regsrv32
注册COM对象。< / p>
一个不错的选择是使用Shell
对象(在MSDN上探索其方法):
Set dlg = CreateObject("Shell.Application")
Set selectedFile = objShell.BrowseForFolder(0, "XML file:", &H00004000&, "C:\")
If Not selectedFile Is Nothing Then
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.load(selectedFile.Self.Path)
End If
那不是打开文件对话框而是浏览文件夹对话框包含文件,更好的解决方法是使用GetOpenFileName,代码更长所以请参阅this article了解完整的来源和详细信息。简而言之,您必须导入该功能:
Declare Function GetOpenFileName Lib "comdlg32.dll"
Alias "GetOpenFileNameA" (OFN As OPENFILENAME) As Boolean
您可能还想查看this code on GitHub,它处理大多数棘手的案例(是的,这样简单的任务最终不是那么简单!!!)