Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 966
  • Last Modified:

Loop through XML file and read nodes

need to loop through and XML file, and grab node vales ...

<users>
<user>
<name>Joe</name>
<oldfolderlocation> C:\oldfolder\ Joe </oldfolderlocation>
<newfolderlocation> C:\newfolder\ Joe </ newfolderlocation >
</ user >
< user >
<name>Tom</name>
<oldfolderlocation> C:\oldfolder\ Tom </oldfolderlocation>
<newfolderlocation> C:\newfolder\ Tom </ newfolderlocation >
</user>

</users>

Dim userNodes As XmlNodeList = doc.SelectNodes("people/ person")
 For Each userNodesNode As XmlNode In userNodes
My.Computer.FileSystem.CopyDirectory(userNodesNode("newfolderlocation ").InnerText, userNodesNode("oldfolderlocation").InnerText, False)

     Next
0
gvilla23
Asked:
gvilla23
  • 2
1 Solution
 
rlh68Commented:

Not sure if it's ee or you xml but, make sure your xml doesn't have spaces in the elements tags, some of them did when I copied your xml to my code. The xmlDocument object may give you errors if your xml is not well formed.

i.e. this
 < user >
should be this
<user>
        Dim xDoc As New Xml.XmlDocument
        Dim xml As String
 
        xml = "<users><user><name>Joe</name><oldfolderlocation>C:\oldfolder\Joe</oldfolderlocation>" & _
           "<newfolderlocation>C:\newfolder\Joe</newfolderlocation></user><user><name>Tom</name>" & _
             "<oldfolderlocation>C:\oldfolder\Tom</oldfolderlocation><newfolderlocation>C:\newfolder\Tom</newfolderlocation></user></users>"
 
        xDoc.LoadXml(xml)
 
        Dim nl As Xml.XmlNodeList
        ' fill node list with users node
 
        nl = xDoc.GetElementsByTagName("users")
        ' loop each users
        For Each nUser As Xml.XmlNode In nl
            '' check for snippetIndex value we want to match
            'If n.SelectSingleNode("snippetIndex").InnerText = "0" Then
            '    ' show snippetName
            '    MessageBox.Show(n.SelectSingleNode("snippetName").InnerText)
            'End If
 
            Dim nName As Xml.XmlNode = nUser.SelectSingleNode("user/name")
            Dim nNewFolderLoc As Xml.XmlNode = nUser.SelectSingleNode("user/newfolderlocation")
            Dim nOldFolderLoc As Xml.XmlNode = nUser.SelectSingleNode("user/oldfolderlocation")
 
            MessageBox.Show(nName.InnerText & " | " & nNewFolderLoc.InnerText & " | " & nOldFolderLoc.InnerText)
 
        Next

Open in new window

0
 
rlh68Commented:

oops, disregard the commented out code, it was from the original code that I used to write your example. I meant to delete it but forgot to.

Garbage code:
            '' check for snippetIndex value we want to match
            'If n.SelectSingleNode("snippetIndex").InnerText = "0" Then
            '    ' show snippetName
            '    MessageBox.Show(n.SelectSingleNode("snippetName").InnerText)
            'End If
0
 
drichardsCommented:
If you are using the XML document for other purposes or if the document is small, the XmlDocument solution is fine.  If the document is large or performance is a concern then you will be better served by an XmlReader.

There are a number of approaches you could take with a reader, and I have included one here.  It's reasonably robust against XML comments and element whitespace.  It advances to each user node and then reads the name, oldfolderlocation, and newfolderlocation text elements.
        Dim rdr As XmlReader = XmlReader.Create(<xml file or stream>)
        While rdr.ReadToFollowing("user")
            rdr.ReadToFollowing("name")
            rdr.Read()
            Dim name As String = rdr.Value
            rdr.ReadToFollowing("oldfolderlocation")
            rdr.Read()
            Dim oldFolder As String = rdr.Value().Trim()
            rdr.ReadToFollowing("newfolderlocation")
            rdr.Read()
            Dim newFolder As String = rdr.Value().Trim()
            ' Do Copy here...
        End While

Open in new window

0
 
gvilla23Author Commented:
Thank you very much for the explanation.
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now