Try this:
string s = @"<?xml version='1.0' encoding='utf-8'?>
<servers><server>s2<database>db1</database><database>db2</database></server>
<server>s3<database>db3</database><database>db4</database></server>
</servers>";
XDocument xdoc = XDocument.Parse(s);
string serv = "s2";
var servers = xdoc.Descendants("server")
.Where(x=>x.Value.Substring(0,serv.Length)==serv)
.SelectMany(x=>x.Descendants("database").Select(d=>d.Value))
.ToList();
Result (
List<string>
)
db1
db2
Notes to your query:
A
database
node (child node) can not look up at
server
node (parent node).
A
server
node does not belong to
database
node, becuase it is up in a hierarchy.