In this question I found out how to use
XDocument MyData = XDocument.Load(FILENAME);
string color = MyData.Descendants("Red").Elements("Shade")
.Where(y => (int)y.Attribute("id") == 3).FirstOrDefault().Value;
to get an element by specifying an attribute "id". The above returns "lava" from the Xml below.
<colours>
<Red>
<Shade id="1">
<colour>crimson</colour>
</Shade>
<Shade id="2">
<colour>raspberry</colour>
</Shade>
<Shade id="3">
<colour>lava</colour>
</Shade>
<Shade id="4">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>
In the following example my Shade elements have an extra attribute called 'group' (I've only added them to 'Red' for the sake of keeping it short. I need to do something similar to the previous, only this time instead of searching on an 'id' and returning its 'colour', I want to search on an 'id' and return its 'group' value.
One solution would be to change 'group' from an attribute to an element, which make adapting the Linq to Xml above more straightforward but I'm eager to see what a solution for the existing Xml would look like.
I'm also eager to learn more about Linq to Xml and using Lambda expressions like this. Any good learning resources you can point me towards will be very gratefully received.
<colours>
<Red>
<Shade id="1" group="yes">
<colour>crimson</colour>
</Shade>
<Shade id="2" group="no">
<colour>raspberry</colour>
</Shade>
<Shade id="3" group="yes">
<colour>lava</colour>
</Shade>
<Shade id="4" group="no">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>