C# LINQ语句来选择XML结构中深层的元素

C# LINQ语句来选择XML结构中深层的元素,c#,.net,linq,linq-to-xml,C#,.net,Linq,Linq To Xml,我有XML,它看起来像这样: <?xml version="1.0" encoding="utf-8"?> <University> <Colleges> <College> <Id> Cambridge </Id> <Dept> <Id> Arts</I

我有XML,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
     <University>
          <Colleges>
            <College>
              <Id> Cambridge </Id>
              <Dept>
                <Id> Arts</Id>
              </Dept>
            </College>
            <College>
              <Id> Oxford</Id>
              <Dept>
                <Id> Philosophy </Id>
              </Dept>
            </College>
          </Colleges>
        </University>

剑桥
艺术类
牛津
哲学
我想根据ID返回学院。在另一个场景中,我只想写学院的ID


我不明白如何编写LINQ语句来直接读取Id。我可以在每个阶段使用
子体()
。但是如何选择深入XML结构内部的元素呢?

也许您应该使用XPath。语法将比纯Linq查询更简单:

using  System.Xml;
using  System.Xml.XPath;
...

public foo()
{
    XElement yourNode = XElement.Parse(yourstring);
    XElement college = root.XPathSelectElement("//College[Id='Oxford']");
}

如果可以在结构中的多个位置使用College节点,则XPAth查询
/University/Colleges/College[Id='OxFord']
将避免冲突问题。

也许您应该使用XPAth。语法将比纯Linq查询更简单:

using  System.Xml;
using  System.Xml.XPath;
...

public foo()
{
    XElement yourNode = XElement.Parse(yourstring);
    XElement college = root.XPathSelectElement("//College[Id='Oxford']");
}
如果可以在结构中的多个位置使用College节点,则XPAth查询
/University/Colleges/College[Id='OxFord']
将避免冲突问题。

LINQ-XML

XDocument doc = XDocument.Parse(xmlStr);
var results = doc.Root.Descendants("College")
              .Where(ele => ele.Element("Id").Value.Trim() == "Oxford");
LINQ-XML

XDocument doc = XDocument.Parse(xmlStr);
var results = doc.Root.Descendants("College")
              .Where(ele => ele.Element("Id").Value.Trim() == "Oxford");

谢谢你的回答。这也是正确的。但不幸的是,我不能接受两个答案!所以我投了更高的票!顺便说一句,我没有选择这个解决方案,因为我不想使用XPath。谢谢你的回答。这也是正确的。但不幸的是,我不能接受两个答案!所以我投了更高的票!顺便说一句,我没有选择这个解决方案,因为我不想使用XPath。