VBScript Sample:遍历文件夹并获取XML文件中指定内容

案例:html

我有一个文件夹,里面有不少子文件夹,每一个子文件夹中都存在一个相同名字的XML文件,XML文件里面的标签结构相同,只是内容不一样,XML文件中包含ID,Name等标签。函数

文件夹及文件结构以下图:spa

要求:3d

遍历每个XML文件,而后实现如下两个功能:code

1)输出全部XML文件中的ID,Name,以及XML文件的路径;xml

2)用户能够提供某一个ID,根据该ID输出与改ID匹配的XML文件的ID,Name,以及XML文件的路径。htm

实现(VBScript):对象

代码逻辑:blog

定义了两个用户输入框,第一个输入框要求用户输入根文件夹路径,第二个输入框要求用户输入ID。ip

1)若是用户只提供了根文件夹路径,用户ID未输入,则输出全部XML文件中的ID,Name,以及XML文件的路径,结果以下图:

image

2)若是用户既提供了根文件夹路径,又提供了用户ID,则根据该ID输出与改ID匹配的XML文件的ID,Name,以及XML文件的路径,结果以下图:

image

代码实现:

Option Explicit
 
Dim strPath,strID
Dim objFSO
Dim objXML
Dim strResult
 
strPath = InputBox("Please input the path of your root folder: ")
strID = InputBox("Please input the ID which you want to search: ")
'建立FileSystemObject对象用于遍历文件夹
Set objFSO = CreateObject("Scripting.FileSystemObject")
'建立Microsoft.XMLDOM对象用于读取XML文件
Set objXML = CreateObject("Microsoft.XMLDOM")
 
'判断用户输入的根文件夹是否存在
If objFSO.FolderExists(strPath) Then
'    若根文件夹存在,则调用GetXMLInfo函数实现读取XML功能
    strResult = GetXMLInfo(strPath,strID)
Else
    MsgBox "Please input a valid forlder name."    
End If
'销毁objFSO和objXML对象
Set objFSO = Nothing
Set objXML = Nothing
'输出结果
If strResult <> "" Then
    MsgBox strResult
Else
    MsgBox "No records found!"
End If
 
Function GetXMLInfo(xmlPath,xmlID)
    Dim objFolders, objFolder
    Dim strFolderpath, strFilepath
    Dim objDocroot
    Dim strOutput,strXMLID,strXMLName,strXMLPath
    
'    获取子文件夹
    Set objFolders = objFSO.GetFolder(xmlPath).SubFolders
'    遍历子文件夹
    For Each objFolder In objFolders
'        经过路径拼接获得XML文件路径(由于每一个XML文件名字相同,因此能够直接拼接获得XML文件路径)
        strFolderpath = objFolder.Path
        strFilepath = strFolderpath & "\TestFile.xml"
        
        If objFSO.FileExists(strFilepath) Then
'            读取XML文件
            objXML.load(strFilepath)
            Set objDocroot = objXML.documentElement                
            strXMLID = objDocroot.selectSingleNode("//xmlLable01/ID").text
            strXMLName = objDocroot.selectSingleNode("//xmlLable01/Name").text
            strXMLPath = strFilepath
'            拼接输出结果
            If xmlID = "" Then
                strOutput = strOutput & vbCrLf & vbCrLf & "ID: " & strXMLID & _
                vbCrLf & "Name: " & strXMLName & _
                vbCrLf & "XMLPath: " & strXMLPath 
            ElseIf InStr(strXMLID,xmlID) >0 Then
                strOutput = strOutput & vbCrLf & "ID: " & strXMLID & _
                vbCrLf & "Name: " & strXMLName & _
                vbCrLf & "XMLPath: " & strXMLPath 
                Exit For
            End If
'            销毁objDocroot对象
            Set objDocroot = Nothing
        End If
    Next
'    销毁objFolder及objFolders对象
    Set objFolder = Nothing
    Set objFolders = Nothing 
'    函数返回值
    GetXMLInfo = strOutput        
End Function
相关文章
相关标签/搜索