I have an XML file that can be one-line:
<webshop><item></item><item></item></webshop>
or multiline:
<webshop>
    <item>
    </item>
    <item>
    </item>
</webshop>
or mixed:
<webshop>
    <item></item>
    <item></item>
</webshop>
Each tag also has a short variant like <webshop/> and <item/> where the tag is opened and closed in one pair of < > brackets. 
each tag can appaer any amount of times, but the <item></item> or <item/> tag will only appaer inside <webshop>  ...  </webshop>. Also, the entire xml tag hierarchy is much larger then just these two tags (but I kept it simple for this question), and each tag can have attributes.
I'm trying to parse such an xmlfile using an xmlreader in c#, but I always run into a problem.
If I try:
while(reader.ReadToFollowing("webshop"))
{
    Console.WriteLine("webshop");
    //get attributes of webshop tag and do something...
    while(reader.ReadToFollowing("item"))
    {
         Console.WriteLine("Item");
        //get attributes of item tag and do something...
    }
}
I never get all the data when the xml is singleline, mixed or the tags close themself (<item/> instead of <item></item>). Most of the time, the reader just stops after one instance of <webshop> or <item> 
Is there a robust way to parse this xml, even if the exact lining is not known beforehand? I want to loop over all webshops, and for each webshop loop all over items, and then do something with this data.
 
     
     
     
    