3

我有一些奇怪的 XML 试图从中读取值。

<text>
  <term>a</term>
  <line>
    <elm>data here</elm>
  </line>
  <term>b</term>
  <line>
    <elm>data here</elm>
  </line>
  <term>c</term>
  <line>
    <elm>data here</elm>
  </line>
</text>

此时我只能访问这 3 个line元素。

当我遍历每一行时,对于第一行,我想找到term恰好具有“a”作为值的元素,因为它是与第一行子元素“最接近”的元素。

第二行也是一样,除了我想找到最近的term元素,在这种情况下是“b”

如何使用 LINQ 可靠地完成此任务?

4

1 回答 1

1

如果term元素总是在line元素之前,你可以使用

XElement.ElementsBeforeSelf().Last()

所以

var element = XElement.Load(@"previous-sibling.xml");
var termsQuery =
            from line in element.Descendants("line")
            select new
            {
                Elm = line.Descendants("elm").FirstOrDefault().Value,
                Term = line.ElementsBeforeSelf().LastOrDefault().Value
            };
于 2013-01-30T20:25:59.950 回答