【发布时间】:2015-01-02 22:59:07
【问题描述】:
我检索 XML 格式的远程 FTP 结构。我正在尝试解析 XML 并将每个项目添加到一个集合中,例如,
TestDir/kernel.dll
TestDir/New folder/
TestDir/New folder/mycert.avi
TestDir/New folder/asdasd
TestDir/New folder/asdasd/asdasd
TestDir/New folder/asdasd/asdasd/asdasdasdasd
TestDir/New folder/asdasd/asdasd/asdasdasdasd/done
TestDir/I7Folder/
TestDir/I7Folder/sdfsdfg.txt
TestDir/I7Folder/sdfsdfsdf.txt
这是我的 XML 数据,
<?xml version="1.0" encoding="utf-8" ?>
<dirTree>
<dir name="TestDir">
<file sz="364" dt="Tue, 30 Dec 2014 22:56:00 -0500">kernel.dll</file>
<dir name="New folder">
<file sz="309" dt="Tue, 30 Dec 2014 23:00:00 -0500">mycert.avi</file>
<dir name="asdasd">
<dir name="asdasd" />
<dir name="asdasdasdasd">
<dir name="done" />
</dir>
</dir>
</dir>
</dir>
<dir name="I7Folder">
<file sz="289" dt="Tue, 30 Dec 2014 22:57:00 -0500">sdfsdfg.txt</file>
<file sz="280" dt="Tue, 30 Dec 2014 22:57:00 -0500">sdfsdfsdf.txt</file>
</dir>
<dir name="data">
<file sz="4727" dt="Tue, 30 Dec 2014 22:56:00 -0500">dasdasd.txt</file>
<file sz="78419" dt="Tue, 30 Dec 2014 22:56:00 -0500">asdasdas.txt</file>
<dir name="New folder">
<dir name="New folder" />
<dir name="New folder (2)">
<dir name="New folder" />
</dir>
</dir>
<dir name="images" />
</dir>
</dir>
</dirTree>
我下面的代码会产生不正确的输出,它会产生类似的东西,
TestDir/New folder/New folder/asdasd/asdasd/asdasdasdasd/done/I7Folder/sdfsdfsdf.txt
如何执行循环,使其不会继续使用不属于正确位置的文件夹名称。我认为这是一个简单的问题,但我似乎无法理解它,因为我已经研究了很长时间。
Dim doc As New XmlDocument
doc.LoadXml(strXml)
Dim x As XmlNode
For Each x In doc("dirTree").ChildNodes
Dim strDir As String = ""
Select Case x.Name
Case "file"
colCurrentFiles.Add(x.InnerText)
Case "dir"
strDir = x.Attributes(0).Value
colCurrentFolders.Add(strDir)
LoopDirectory(x, "", colCurrentFiles, colCurrentFolders, strDir)
Exit Sub
End Select
Next
Private Sub LoopDirectory(x As XmlNode, strDir As String, colCurrentFiles As Collection, colCurrentFolders As Collection, strParentDirectory As String)
Debug.Write(strDir & vbNewLine)
Dim y As XmlNode
For Each y In x.ChildNodes
Select Case y.Name
Case "file"
colCurrentFiles.Add(strDir & "\" & y.InnerText)
Case "dir"
If strDir = "" Then
strDir = strParentDirectory & "\" & y.Attributes(0).Value
Else
strDir = strDir & "\" & y.Attributes(0).Value
End If
Debug.Write(strDir & vbNewLine)
colCurrentFolders.Add(strDir)
LoopDirectory(y, strDir, colCurrentFiles, colCurrentFolders, strParentDirectory)
End Select
Next
End Sub
【问题讨论】: