Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打开文件对话框以选择XML文件_Xml_Vbscript - Fatal编程技术网

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

打开文件对话框以选择XML文件,xml,vbscript,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.getE

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

任何帮助都将不胜感激。

对于Windows XP,您可以使用
用户帐户。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
Set dlg = CreateObject("MSComDlg.CommonDialog.1")
dlg.InitialDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
dlg.Filter = "XML files|*.xml"
这个DLL似乎不是在每个系统上都注册的,如果是这样的话,您必须在c:\windows\system32中,用
regsrv32
注册COM对象

另一个不错的选择是使用
Shell
对象(在上探索其方法):

这不是一个真正的“打开文件”对话框,而是一个“浏览文件夹”对话框,其中包含文件,更好的解决方案是使用,代码更长,所以请参阅以获取完整的源代码和详细信息。简而言之,您必须导入该函数:

Declare Function GetOpenFileName Lib "comdlg32.dll" 
    Alias "GetOpenFileNameA" (OFN As OPENFILENAME) As Boolean

您可能还想看看,它可以处理大多数棘手的情况(是的,这样简单的任务最终不是那么简单!!!)

我遇到一个错误:ActiveX组件无法创建对象“UserAccounts.CommonDialog”,就像我使用Windows的方式一样7@RiquelmyMelara是的,它已在Windows Vista中删除,我添加了更多示例(还有…实际上是源代码的链接)谢谢你的帮助!
Declare Function GetOpenFileName Lib "comdlg32.dll" 
    Alias "GetOpenFileNameA" (OFN As OPENFILENAME) As Boolean