Предполагая, что у вас есть XDocument , представляющий вашу XML-структуру
var doc = XDocument.Parse(@"<A>
<B id='1'>
<C id='2' />
</B>
<B id='3'>
<C id='4' />
</B>
</A>");
и XElement , представляющий элемент с id='4'
в этом документе
XElement x = doc.Descendants().Single(e => (int?)e.Attribute("id") == 4);
Вы можете создать новый XDocument , состоящий из этого элемента и его родительских элементов, следующим образом:
XElement y = x;
while (x.Parent != null)
{
x = x.Parent;
y = new XElement(x.Name, x.Attributes(), y);
}
XDocument result = new XDocument(y);
Результат:
<A>
<B id="3">
<C id="4" />
</B>
</A>