Look at your code:
sr.ReadToEnd();
xdoc = XDocument.Load(sr);
So the stream is at the end of the data, and you pass it to the XML processor? Rewind it, so it is at some data!
using (MemoryStream ms = new MemoryStream())
{
using (StreamWriter sw = new StreamWriter(ms))
{
sw.Write(filecontent);
using (StreamReader sr = new StreamReader(ms))
{
sr.BaseStream.Seek(0, SeekOrigin.Begin);
...
}
}
}