开发者

XML Lambda query in C#

I have an XmlDocument object and xml in the format:

<?xml version="1.0" encoding="utf-8"?>
<S xmlns="http://server.com/DAAPI">
    <TIMESTAMP>2010-08-16 17:25:45.633</TIMESTAMP>
    <MY_GROUP>
        <GROUP>1 </GROUP>
        <NAME>Amsterdam</NAME>
        ....
    </MY_GROUP>
    <MY_GROUP>
        <GROUP>2 </GROUP>
        <NAME>Ireland</NAME>
        ....
    </MY_GROUP>
    <MY_GROUP>
        <GROUP>3 </GROUP>
        <NAME>UK</NAME>
        ....
 开发者_开发知识库   </MY_GROUP>

Using a Lambda expression (or Linq To XML if it's more appropriate) on the XmlDocument object how can i do the following:

  1. get the text of a specific element, say the text of NAME where GROUP = 1
  2. the value of the first occurance of the element "NAME"

Thanks a lot


Assuming you mean XDocument rather than XmlDcoument:

First question:

XNamespace ns = "http://server.com/DAAPI";
string text = (from my_group in doc.Elements(ns + "MY_GROUP")
               where (int) my_group.Element(ns + "GROUP") == 1
               select (string) my_group.Element(ns + "NAME")).First();

I didn't really understand the second question... what do yuo mean by "contains an element of that name"? Which name? And if you're checking for NAME being equal to a give name, wouldn't you already know that name? Did you perhaps mean the value of GROUP for a specific name? If so, it's easy:

XNamespace ns = "http://server.com/DAAPI";
int group = (from my_group in doc.Elements(ns + "MY_GROUP")
             where (string) my_group.Element(ns + "NAME")
             select (int) my_group.Element(ns + "GROUP")).First();

Both of these queries assume that the values do exist, and that each MY_GROUP element has a GROUP and NAME subelement. Please let us know if that's not the case.


I have used Linq to XML.

string input = "<?xml version=\"1.0\" encoding=\"utf-8\"?><S xmlns=\"http://server.com/DAAPI\"><TIMESTAMP>2010-08-16 17:25:45.633</TIMESTAMP><MY_GROUP><GROUP>1 </GROUP><NAME>Amsterdam</NAME>....</MY_GROUP><MY_GROUP><GROUP>2 </GROUP><NAME>Ireland</NAME>....</MY_GROUP><MY_GROUP><GROUP>3 </GROUP><NAME>UK</NAME>....</MY_GROUP></S>";

var doc = XDocument.Parse(input);

XNamespace ns = "http://server.com/DAAPI";

//The first question
var name = (from elem in doc.Root.Elements(ns + "MY_GROUP")
            where elem.Element(ns  + "GROUP") != null    //Checks whether the element actually exists - if you KNOW it does then it can be removed
                && (int)elem.Element(ns + "GROUP") == 1  //This could fail if not an integer - insure it is if nessasary
            select (string)elem.Element(ns + "NAME")).SingleOrDefault();


I understood only your first question. Here you are for the first:

var xmlSource = myGroup.Load(@"../../MyGroup.xml");


var q = from c in xmlSource.myGroup
        where c.group = 1
        select c.name;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜