Imir Hoxha
Imir Hoxha

Reputation: 1694

how to loop through xml nodes using XPathSelectElements or linq to xml

I would like to loop through the nodes in the xml below and get the values of the following elements: H_Domain, H_Environment, H_Mastered. XPathSelectElements returns an IEnumerable list and indexing cannot be applied to these XElement. Anyone has got any idea how to get values for each element as shown (relative) in the code example?

private static void GetHabitation()
    {
        try
        {
            IEnumerable<XElement> list = xdoc.XPathSelectElements("//Audit/agents/agent/questions/H0/*");
            foreach (XElement element in list)
            {
                Console.WriteLine(element["H_Domain"].Value);
                Console.WriteLine(element["H_Environment"].Value);
                Console.WriteLine(element["H_Mastered"].Value);
             }

            return haList;

        }
        catch (Exception)
        {

            throw;
        }
    }

xml

<?xml version="1.0" encoding="utf-8"?>
<Audit>
   <agents xmlns="">
    <agent>
      <questions>
        <H0>
          <H_Domain>RAC Raccordement Basse Tension</H_Domain>
          <H_Environment>CPT travaux comptage</H_Environment>
          <H_Mastered>0</H_Mastered>
        </H0>
        <H0>
          <H_Domain>IBT Intervention r�seau Basse Tension</H_Domain>
          <H_Environment>TIA Travaux aux installations a�riennes</H_Environment>
          <H_Mastered>0</H_Mastered>
        </H0>
        <H0>
          <H_Domain>IBT Intervention r�seau Basse Tension</H_Domain>
          <H_Environment>AEM Actes d'exploitation et man�uvre</H_Environment>
          <H_Mastered>0</H_Mastered>
        </H0>
      </questions>
    </agent>
  </agents>
</Audit>

Upvotes: 0

Views: 3332

Answers (1)

Martin Honnen
Martin Honnen

Reputation: 167571

There is an Element method so use

        IEnumerable<XElement> list = xdoc.XPathSelectElements("//Audit/agents/agent/questions/H0");
        foreach (XElement h0 in list)
        {
            Console.WriteLine((string)h0.Element("H_Domain"));
            Console.WriteLine((string)h0.Element("H_Environment"));
            Console.WriteLine((int)h0.Element("H_Mastered"));
         }

Upvotes: 2

Related Questions