The XML input is not as expected (it is "empty") and the exception occurs during XDocument.Load (or XDocument.Parse, etc).
Ultimately xdoc does not contain what is expected - and the "suspect" lines never even run; again, this Exception is caused when the XML is parsed, not when it is enumerated/navigated. This scenario should be easily identified with an attached debugger or stack-trace.
Here is some minimal code that can be run in LINQPad as C# statements. I've modified it just enough to display nicely with dump. Note that it runs as expected.
var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
<response success=""true"">
<struct>value</struct>
</response>";
var xdoc = XDocument.Parse(xmlStr);
xdoc.Descendants("response")
.Select(e => e.Element("struct").Value)
.Dump();
Here is how the exception can be caused (and it has nothing to do with Descendants or other enumeration/navigation):
var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>";
var xdoc = XDocument.Parse(xmlStr);
// --> XmlException: Root element is missing
xdocloaded and what does it really contain? I would imagine it does not represent that XML.