I had XML like this:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfmyNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <myNode>
    <Name>Echo one</Name>
    <Category>Reporting</Category>
    <Id>1</Id>
    <Workflow>
      <Application>Reporting</Application>
      <Name>EchoOne</Name>
      <Configuration>
        <ConfigItem>
          <Key>ReportSuccessToAddress</Key>
          <Value>echoOneSuccess - at - echoone.com</Value>
        </ConfigItem>
        <ConfigItem>
          <Key>ReportErrorToAddress</Key>
          <Value>echoOneError - at - echoone.com</Value>
        </ConfigItem>
        <ConfigItem>
          <Key>ReportSuccessCcAddress</Key>
          <Value>echoOneSuccessCc - at - echoone.com</Value>
        </ConfigItem>
      </Configuration>
    </Workflow>
  </myNode>
  <myNode>
    <Name>Echo two</Name>
    <Category>Reporting</Category>
    <Id>2</Id>
    <Workflow>
      <Application>Reporting</Application>
      <Name>EchoTwo</Name>
      <Configuration>
        <ConfigItem>
          <Key>ReportSuccessToAddress</Key>
          <Value>echoTwoSuccess - at - echoone.com</Value>
        </ConfigItem>
        <ConfigItem>
          <Key>ReportErrorToAddress</Key>
          <Value>echoTwoError - at - echoone.com</Value>
        </ConfigItem>
        <ConfigItem>
          <Key>ReportSuccessCcAddress</Key>
          <Value>echoTwoSuccessCc - at - echoone.com</Value>
        </ConfigItem>
      </Configuration>
    </Workflow>
  </myNode>
 </ArrayOfmyNode>

Instead of - at - should be @, I am having problems with spambot protection :)

And I wanted to extract all e-mails from ReportSuccessToAddress, ReportErrorToAddress and ReportSuccessCcAddress nodes.

Model I implemented as array in my view:

@model PlayingWithXmlInAspMvc.Models.PlayingWithXmlModel[]

Then I had to load XML from file:

XElement linqMyNodes = XElement.Load(Request.Url.AbsoluteUri + "PlayingWithXml.xml"); 

If you need to load XML from string, then use parse.

I have selected all myNode nodes in the XML:

IEnumerable<XElement> myLinqNodes = from myNodes in linqMyNodes.Elements("myNode") select myNodes;

After that in controller I have created model like:

PlayingWithXmlModel[] myModel = new PlayingWithXmlModel[myLinqNodes.Count()];

Extract every ConfigItem element for each myNode:

foreach (var myLinqNode in myLinqNodes)
{
	myModel[i] = new PlayingWithXmlModel();
	var Configurations = from configuration in myLinqNode.Elements("Workflow").Elements("Configuration").Elements("ConfigItem")
						 select configuration;
}

In previous line there is myModel[i] = new PlayingWithXmlModel(), which means that for every item in array you have to create object, in my case model.

Now I need to extract addresses from Configurations:

foreach (var Configuration in Configurations)
{
	if (Configuration.Element("Key") != null)
	{
		switch (Configuration.Element("Key").Value)
		{
			case "ReportSuccessToAddress":
				myModel[i].ReportSuccessToAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
				break;
			case "ReportErrorToAddress":
				myModel[i].ReportErrorToAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
				break;
			case "ReportSuccessCcAddress":
				myModel[i].ReportSuccessCcAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
				break;
		}
	}
}

Where .Replace(" ", string.Empty) I needed to delete spaces in values.

On the end I will send model to my view like:

return View(myModel);

This article is just to show few examples of LinqToXml and passing model as array to the view. One small example you can see here.