Solved

Loop through XML file and read nodes

Posted on 2008-10-16
4
950 Views
Last Modified: 2012-05-05
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
Comment
Question by:gvilla23
  • 2
4 Comments
 
LVL 8

Expert Comment

by:rlh68
ID: 22737303

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
 
LVL 8

Expert Comment

by:rlh68
ID: 22737309

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
 
LVL 19

Accepted Solution

by:
drichards earned 50 total points
ID: 22737983
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
 

Author Closing Comment

by:gvilla23
ID: 31506981
Thank you very much for the explanation.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Visual Studio editor? 1 38
Help with LINQ and XML 10 27
Variable Event ? 3 23
VB 2005 how to get a new line of data each time I try to write to a file. 10 16
A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now