LINQ语句选择XML结构内部的元素

时间:2012-07-11 09:35:37

标签: c# .net linq linq-to-xml

我的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。

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

2 个答案:

答案 0 :(得分:4)

也许你应该使用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']将避免冲突问题。

答案 1 :(得分:3)

LINQ-XML,

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