C# Linq to Sql 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</term>
  <line>
    <elm>data here</elm>
  </line>
</text>

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

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

除了我想找到最接近的 term 元素外,第二行也一样,在本例中是“b”

如何使用 LINQ 可靠地完成此操作?

最佳答案

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

关于C# Linq to Sql XML 检索父级中最近的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612730/

相关文章:

c# - C# 编译器如何删除发布版本中的 Debug.Assert?

c# - Azure 表存储不会保存实体定义中的所有内容

c# - 如何对齐两个(或更多)图表的大小、滚动和网格

java : Convert formatted xml file to one line string

xml - Delphi 的 oBix (xml) 客户端

c# - 为什么在除 IE 之外的所有浏览器上 XMLHttpRequest.status == 0?

xml - 'xsl:copy-of' 和 'xsl:sequence' 有什么区别?

c# - Linq/XML - 你如何处理不存在的节点?

c# - 通用方法中的 Linq-to-XML 显式转换

xml - 如何通过XPath获取XML节点