在xml中获取搜索关键字的上一个节点

时间:2011-06-14 15:50:19

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

我有一个xml文档,如下所示:

<bookstore>
  <book>
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
     <first-name>Benjamin</first-name>
     <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book>
    <title>Zen and the Art of Motorcycle Maintenance</title>
    <author>
     <first-name>Robert</first-name>
     <last-name>Pirsig</last-name>
    </author>
    <price>5.99</price>
  </book>
  <book>
    <title>Other Cities</title>
    <author>
     <first-name>Benjamin</first-name>
     <last-name>Rosenbaum</last-name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

当然,书店有不止一本书,所以我想搜索一位作者,然后为包含搜索到的作者姓名的书籍节点返回XElement

1 个答案:

答案 0 :(得分:3)

var document = XDocument.Parse(xml);

var bookElements = document.Descendants("book")
    .Where(arg => arg.Element("author").Element("first-name").Value == "Benjamin")
    .ToList();

var bookElements = document.Descendants("first-name")
    .Where(arg => arg.Value == "Benjamin")
    .Select(arg => arg.Parent.Parent)
    .ToList();

[编辑]当你继续编辑问题时,我会编辑答案:)。

要查找符合条件的第一本书:

var foundBookElement = document.Descendants("book")
    .Where(arg => arg.Element("author").Element("first-name").Value == "Benjamin")
    .FirstOrDefault();
如果没有一本书符合条件,

foundBookElement将为空。