【问题标题】:LINQ statement to select the element which is deep inside the XML structureLINQ 语句选择 XML 结构深处的元素
【发布时间】:2012-07-11 09:35:36
【问题描述】:

我的 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结构深处的元素呢?

【问题讨论】:

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


    【解决方案1】:

    也许您应该使用 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。
    【解决方案2】:

    LINQ-XML,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多