Click here to Skip to main content
Click here to Skip to main content

Iterate XML with XMLReader

By , 19 Dec 2011
 
**I am in process of reviewing the code as someone reported a potential bug, I have not verified this yet. I will make an update soon. Thanks for your patience -dec 19 - rj***
 
Our helper methods will create a dictionary of elements and dictionary of attributes. Therefore we simply loop through elements and attributes as so.
 
As always, with XML, there are 999 other ways to do the same thing however, this is simple syntax and a quick approach.
 
Dictionary<string, string> elements = GetElements( xmlFragment );
            foreach ( var elementKeyPair in elements )
            {
                Dictionary<string, string> attributes = GetAttributes(elementKeyPair.Key, xmlFragment);
            }
 

        public static Dictionary<string, string> GetElements(string XmlFragment)
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            byte[] byteArray = Encoding.ASCII.GetBytes(XmlFragment); //todo: optimize me
            MemoryStream stream = new MemoryStream(byteArray);        //todo: optimize me
            XmlReader reader = XmlReader.Create(stream);
            try
            {
                while (reader.Read())
                {
                    if (reader.IsStartElement())
                    {
                                               KeyValuePair<string, string> pair = new KeyValuePair<string, string>(reader.Name, reader.Value);
                        if (dictionary.Contains(pair) == false)
                        {
                            dictionary.Add(reader.Name, reader.Value);
                        }
                    }
                }
            }
            catch { }
            return dictionary;
        }
        public static Dictionary<string, string> GetAttributes(string element, string XmlFragement)
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            byte[] byteArray = Encoding.ASCII.GetBytes(XmlFragement); //todo: optimize me
            MemoryStream stream = new MemoryStream(byteArray);        //todo: optimize me
            XmlReader reader = XmlReader.Create(stream);
          
            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    if ( reader.Name == element )
                    {
                        for ( int i = 0; i < reader.AttributeCount; ++i )
                        {
                            reader.MoveToNextAttribute();
                            dictionary.Add(reader.Name, reader.Value);
                        }
                    }
                }
            }
            return dictionary;
        }

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

rj45
Software Developer (Senior)
Canada Canada
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralReason for my vote of 1 need more explainsmemberYeurl_200715 Dec '11 - 22:17 
Reason for my vote of 1
need more explains
GeneralRe: What do you want to know, I will add it.memberrj4516 Dec '11 - 7:38 
What do you want to know, I will add it.
GeneralReason for my vote of 2 off, nothing interestingmemberalexxksys15 Dec '11 - 19:43 
Reason for my vote of 2
off, nothing interesting
GeneralRe: First part of a series.memberrj4516 Dec '11 - 7:38 
First part of a series.
GeneralRe: sh*tmemberMember 774276121 Dec '11 - 3:08 
shit

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130523.1 | Last Updated 19 Dec 2011
Article Copyright 2011 by rj45
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid