C# 仅在父节点内查询同级XML节点

C# 仅在父节点内查询同级XML节点,c#,xml,excel,siblings,C#,Xml,Excel,Siblings,这可能是一个基本的问题,但我不熟悉用C#查询XML文件,因此,如果有任何帮助,我将不胜感激 我有一个XML文件: <?xml version="1.0" encoding="utf-8"?> <StatementList> <Point> <Statement> <StatementString>S1</StatementString> <Children>

这可能是一个基本的问题,但我不熟悉用C#查询XML文件,因此,如果有任何帮助,我将不胜感激

我有一个XML文件:

<?xml version="1.0" encoding="utf-8"?>

<StatementList>
  <Point>
    <Statement>
      <StatementString>S1</StatementString>
      <Children>
         <Point>
          <Statement>
            <StatementString>S2</StatementString>
            <Children></Children>
          </Statement>
          <Statement>
            <StatementString>!S2</StatementString>
            <Children></Children>
          </Statement>
        </Point>
      </Children>
    </Statement>
    <Statement>
      <StatementString>!S1</StatementString>
      <Children>
        <Point>
          <Statement>
            <StatementString>S3</StatementString>
            <Children></Children>
          </Statement>
          <Statement>
            <StatementString>!S3</StatementString>
            <Children></Children>
          </Statement>
        </Point>
      </Children>
    </Statement>
  </Point>
</StatementList>
我应该怎么做才能得到我需要的值?提前谢谢。 };

试试这个:

        var points = pathsDocument.Descendants("Point");
        foreach (var point in points)
        {
            var statements = point.Elements("Statement").Select(x => x.Element("StatementString").Value );
            Console.WriteLine(string.Join(" ", statements.ToArray()));
        }

我相信有更好的方法将它们分组,这样您就没有foreach来获取StatementString集合,但时间已经晚了,我已经脑死亡,明天还有工作,这应该可以工作。

这是什么意思(“我应该怎么做才能只获得我需要的值?”)?你想得到什么?我只需要得到每个语句的同级语句字符串的值,就像我上面写的例子一样。。因为目前,当我查询XML时,它会返回所有语句字符串,包括其中的那些,即使是第一个。我的答案对你不起作用吗?它应该-我在我的机器上运行了它,它提供了您想要的数据。
点中有两个
语句字符串
值。一个来自点,另一个在孩子们的陈述下。两个都要吗?或仅适用于儿童?Gjeltema,当我尝试使用代码时,出现了两个错误“无法从”System.Collections.Generic.IEnumerable“转换为”string[]”,以及“与“string.Join(string,string[])”匹配的最佳重载方法有一些无效参数”。为什么呢?
        var points = pathsDocument.Descendants("Point");
        foreach (var point in points)
        {
            var statements = point.Elements("Statement").Select(x => x.Element("StatementString").Value );
            Console.WriteLine(string.Join(" ", statements.ToArray()));
        }