1

我有看起来像这样的 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返回College。在另一种情况下,我想只写学院的 ID。

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

4

2 回答 2

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']将避免冲突问题。

于 2012-07-11T09:39:39.060 回答
3

LINQ-XML,

XDocument doc = XDocument.Parse(xmlStr);
var results = doc.Root.Descendants("College")
              .Where(ele => ele.Element("Id").Value.Trim() == "Oxford");
于 2012-07-11T09:44:11.370 回答