C# 如何使用Linq to XML获取元素值

C# 如何使用Linq to XML获取元素值,c#,.net,xml,linq,linq-to-xml,C#,.net,Xml,Linq,Linq To Xml,使用Linq To XML,如何从下面的XML中获取空格_id值(720) 我正在阅读,但我认为xml中的名称空间是我的绊脚石 <r25:spaces xmlns:r25="http://www.collegenet.com/r25" pubdate="2009-05-05T12:18:18-04:00"> <r25:space id="VE1QOjRhMDAyZThhXzFfMWRkNGY4MA==" crc=&

使用Linq To XML,如何从下面的XML中获取空格_id值(720)

我正在阅读,但我认为xml中的名称空间是我的绊脚石

<r25:spaces xmlns:r25="http://www.collegenet.com/r25" pubdate="2009-05-05T12:18:18-04:00">
  <r25:space id="VE1QOjRhMDAyZThhXzFfMWRkNGY4MA==" crc="" status="new">
    <r25:space_id>720</r25:space_id>
    <r25:space_name>SPACE_720</r25:space_name>
    <r25:max_capacity>0</r25:max_capacity>
  </r25:space>
</r25:spaces>

如果只需要唯一的
空格\u id
元素,不需要查询等:

XNamespace ns = "http://www.collegenet.com/r25";
string id = doc.Descendants(ns + "space_id")
               .Single()
               .Value;
(其中,
doc
是一个
XDocument
-或一个
XElement
)。

您也可以使用(代码稍有变化,我认为上面的代码更可读)


关于Jon Skeets的回答有点冗长

string xml = @"<r25:spaces xmlns:r25=""http://www.collegenet.com/r25"" pubdate=""2009-05-05T12:18:18-04:00"">"
    + @"<r25:space id=""VE1QOjRhMDAyZThhXzFfMWRkNGY4MA=="" crc="""" status=""new"">"
    + @"<r25:space_id>720</r25:space_id>"
    + @"<r25:space_name>SPACE_720</r25:space_name>"
    + @"<r25:max_capacity>0</r25:max_capacity>"
    + @"</r25:space>"
    + @"</r25:spaces>";

XDocument xdoc = XDocument.Parse(xml);
XNamespace ns = "http://www.collegenet.com/r25";

var value = (from z in xdoc.Elements(ns.GetName("spaces"))
             .Elements(ns.GetName("space"))
             .Elements(ns.GetName("space_id")) 
         select z.Value).FirstOrDefault();
stringxml=@“”
+ @""
+ @"720"
+@“空间_720”
+ @"0"
+ @""
+ @"";
XDocument xdoc=XDocument.Parse(xml);
XNS=”http://www.collegenet.com/r25";
var值=(从xdoc.Elements(ns.GetName(“空格”)中的z开始)
.Elements(ns.GetName(“空格”))
.Elements(ns.GetName(“空格_id”))
选择z.Value).FirstOrDefault();

是否有办法从XDocument.Parse(myXMLString)创建的XDocument对象获取名称空间?您可以获取doc.Root.Name.namespace
XNamespace ns = "http://www.collegenet.com/r25";
string id = doc.Descendants(ns.GetName("space_id").Single().Value;
string xml = @"<r25:spaces xmlns:r25=""http://www.collegenet.com/r25"" pubdate=""2009-05-05T12:18:18-04:00"">"
    + @"<r25:space id=""VE1QOjRhMDAyZThhXzFfMWRkNGY4MA=="" crc="""" status=""new"">"
    + @"<r25:space_id>720</r25:space_id>"
    + @"<r25:space_name>SPACE_720</r25:space_name>"
    + @"<r25:max_capacity>0</r25:max_capacity>"
    + @"</r25:space>"
    + @"</r25:spaces>";

XDocument xdoc = XDocument.Parse(xml);
XNamespace ns = "http://www.collegenet.com/r25";

var value = (from z in xdoc.Elements(ns.GetName("spaces"))
             .Elements(ns.GetName("space"))
             .Elements(ns.GetName("space_id")) 
         select z.Value).FirstOrDefault();