tags:

views:

83

answers:

1

I need to access Values under Address Tag using linq to Xml.

<p1:Person>
  <p2:ID>1</p2:ID>
  <p2:Name>Qwerty</p2:Name>
  <p2:Address>
    <p2:street>1111 abc</p2:street>
    <p2:road # >9</p2:road #>
  </p2:Address>
<p1:Person>


I wrote a query like this

ArrayList nodes = new ArrayList();
List<XElement> personNode = xml.Elements().Where(e => e.Name.LocalName == "Person").ToList();
foreach (XElement x in personNode )
{
    IEnumerable<XElement> addressNode = x.Elements().Where(e => e.Name.LocalName == "Address");
    foreach (XElement x in addressNode)
    {                
        IEnumerable<XElement> streetNode= x.Elements().Where(e => e.Name.LocalName == "street");
        foreach (XElement x1 in streetNode)
        {
            Nodes.Add(x1.Value);
        }
    }
}

This should give me the Street Value in Nodes Arraylist.. But Error is near "addressNode".. No values are getting into addressNode variable.

Please Throw some input on this Query. That would be of great Help.

Regards, NewbietoLinq

+1  A: 

Looks like you're trying to re-use the x variable inside the nested foreach loop. Does this work?

ArrayList nodes = new ArrayList();
List<XElement> personNode = xml.Elements().Where(e => e.Name.LocalName == "Person").ToList();
foreach (XElement p in personNode )
{
    IEnumerable<XElement> addressNode = p.Elements().Where(e => e.Name.LocalName == "Address");
    foreach (XElement a in addressNode)
    {                
        IEnumerable<XElement> streetNode= a.Elements().Where(e => e.Name.LocalName == "street");
        foreach (XElement s in streetNode)
        {
            Nodes.Add(s.Value);
        }
    }
}
Dennis Palmer