Click here to Skip to main content
15,891,951 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
C#
var item = from items in xdoc.Descendants("database")
                          where (string)items.Element("server") == serv
                          select items.Elements("database").ToList();
               foreach (var items in item)
               {
                   lstDBName.Add(items.ToString());
               }
               return lstDBName;


XML :

XML
<?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>
Posted
Comments
Andreas Gieriet 11-Nov-15 5:08am    
What exactly do you want to achieve?
Where is the problem?
Andi
Member 12002095 11-Nov-15 5:12am    
I want to convert this linq statement into list of string type
Andreas Gieriet 11-Nov-15 5:29am    
Your naming scheme is very confusing. You seem to confuse singular and plurals. Even it sounds irrelevant: give decent names to your "item(s)" and you see you get more sense out of it (say: you see that you confuse things). Then try to get stepwise to the correct *query* by splitting into steps and dump by console. E.g. foreach(var item in xdoc.Descendants("database")) Console.Writeline(item);. If this succeeds, extend further, etc.
Regards
Andi
Member 12002095 11-Nov-15 6:02am    
Thanks :)

I'd go for XmlDocument and associated items since it's easier there to access items via XPath. E.g.
C#
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(file);
var xmlQuery =
    xmldoc
    .SelectNodes("/servers/server").Cast<XmlElement>()
    .Where(e => e.SelectSingleNode("text()").Value.Trim() == "s3")
    .SelectMany(e=>e.SelectNodes("database/text()").Cast<XmlText>(), (e,t)=>t.Value.Trim())
    ;
foreach (var item in xmlQuery)
{
    Console.WriteLine(item);
}

Regards
Andi
 
Share this answer
 
v2
Try this:
C#
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.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900