打开文件对话框以选择XML文件

时间:2014-06-24 20:07:15

标签: xml vbscript

我有一个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

任何帮助将不胜感激。

1 个答案:

答案 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,它处理大多数棘手的案例(是的,这样简单的任务最终不是那么简单!!!)