【问题标题】:Xml linq query based on 2 Elements基于 2 个元素的 XML linq 查询
【发布时间】:2014-01-11 08:32:48
【问题描述】:

如何使用 linq 返回特定“作者”的所有“标题”值?

<Details xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Record>
    <Author>Barry White</Author>
    <Title>First Book</Title>
  </Record>
  <Record>
    <Author>Barry White</Author>
    <Title>Second Book</Title>
  </Record>
  <Record>
    <Author>Norman White</Author>
    <Title>Second Book</Title>
  </Record>
 </Details>

【问题讨论】:

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


    【解决方案1】:
    var xDoc = XDocument.Load("Input.xml");
    
    var author = "Barry White";
    var titles = (from r in xDoc.Root.Elements("Record")
                  let _author = (string)r.Element("Author")
                  let _title = (string)r.Element("Title")
                  where _author == author
                  select _title).ToList();
    

    或使用基于方法的查询:

    var titles = xDoc.Root.Elements("Record")
                     .Where(r => (string)r.Element("Author") == author)
                     .Select(r => (string)r.Element("Title"))
                     .ToList();
    

    【讨论】:

      【解决方案2】:

      你可以使用LINQ to XML:

      var titles = XDocument.Parse(inputxml)
                            .Descendants("Record")
                            .Where(x => x.Element("Author").Value == "Barry White")
                            .Select(x => x.Element("Title").Value)
                            .ToList();
      

      【讨论】:

      • 你不应该那样使用Descendants
      • @RobertHarvey 因为它使查询效率降低
      • @MarcinJuraszek,如果我熟悉 XML 结构并且我确定只有一个 Record 标记用法,为什么不呢?
      • @MarcinJuraszek:过早的优化,yada yada。
      • 嗯,这是你的意见。我不认为这还为时过早。你不知道原始文件有多大,是吗?当您有 3 条记录时可能无关紧要,但对于更大的文件,它会给您带来很多不必要的检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多