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

本文关键字:上一个 节点 关键字 搜索 xml 获取 | 更新日期: 2023-09-27 17:59:03

我有一个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

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

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将为空。