Q:

Getting root node id based on a given child id in XML

Here is my XML structure:
<DirectoryNode Id="297fe1ac-ff9b-4c40-ada4-86dc713a9537" Title="Root">
   <DirectoryNode Id="80e01248-1170-4393-a327-b97409d51159" Title="A">
      <DirectoryNode Id="e6db6d3f-be30-4cdf-b79e-864cc9b52c5f" Title="A1">
         <DirectoryNode Id="4368d898-6fb0-4e2f-ba56-edbaf4bd0077" Title="A11" />
      </DirectoryNode>
      <DirectoryNode Id="11c5336b-462e-45dc-b4d3-92032ebc3ae3" Title="A2" />
   </DirectoryNode>
   <DirectoryNode Id="b983fd39-fc2e-43e0-80e6-3808fb47f995" Title="B">
      <DirectoryNode Id="433851d6-9935-4adb-9acb-7055c26e85cb" Title="B1">
         <DirectoryNode Id="f2602aed-6d97-4e46-9e8a-fb181b28f0c8" Title="B11" />
      </DirectoryNode>
   </DirectoryNode>
   <DirectoryNode Id="9144d8cf-93c0-4de6-9109-448d396a9e17" Title="C" />
   <DirectoryNode Id="182491af-452e-40bc-b51e-59f078db3ad3" Title="D" />
</DirectoryNode>

What I'm trying to do is get the root node (not the main root node) id given a directory node id. Here's some examples:

Given A11's Id, I want A's Id
Given A2's Id, I want A's Id
Given A's Id, I want A's Id
Given B1's Id, I want B's Id

I'm horrible when it comes to parsing xml and pulling out values - does anyone know a quick way to do this?

A:

Sounds like you could use something like:
XDocument doc = XDocument.Parse("nodes.xml");
XElement node = doc.Descendants("DirectoryNode")
                   .Where(n => (string) n.Attribute("Id") == id)
                   .Single();

// Now go up until we find the highest node beneatht the document root node
while (node.Parent != doc.Root)
{
    node = node.Parent;
}

Note that if there can be multiple nodes with the same ID, or if the ID might not be present at all, you'd have to change your query. For example, if you only care about the first match, but there might be no matches, you could change Single to FirstOrDefault() and then use (before the while loop):
if (node == null)
{
    // No matches. Take appropriate action here.
}

