Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Linq到Sql XML检索父级中最近的元素_C#_Xml_Linq To Xml - Fatal编程技术网

C#Linq到Sql XML检索父级中最近的元素

C#Linq到Sql XML检索父级中最近的元素,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有一些不可靠的XML,我正试图从中读取值 <text> <term>a</term> <line> <elm>data here</elm> </line> <term>b</term> <line> <elm>data here</elm> </line> <term>c</t

我有一些不可靠的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>

A.
这里的数据
B
这里的数据
C
这里的数据
此时,我只能访问3个
元素

当我在每一行上循环时,对于第一行,我想找到元素
term
,该元素恰好有“a”作为值,因为它与第一行子元素“最接近”

第二行也是一样,只是我想找到最近的
术语
元素,在本例中是“b”


如何使用LINQ可靠地实现这一点?

如果
术语
元素始终位于
元素之前,则可以使用

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
            };