Запрос одноуровневых узлов XML только внутри родительского узла

Это может быть основной вопрос, но я новичок в запросах файлов XML в C#, поэтому любая помощь будет принята с благодарностью.

У меня есть этот файл 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>

Мне нужно запросить XML-файл так, чтобы я получил только одного брата <StatementString>с каждого <Point>, Напр.:

A S1! S1

B S2! S2

C S3! S3

В настоящее время я использую этот код для запроса файла XML, но я не могу получить только те значения, которые мне нужны для каждой точки.

            var statementList = from point in pathsDocument.Descendants("Point")
                        select new
                        {

                        };

            var points = from statement in pathsDocument.Descendants("Point").Descendants("Statement")
                         select new
                         {
                             statementString = statement.Element("StatementString").Value,

Что я должен сделать, чтобы получить только те значения, которые мне нужны? заранее спасибо. };

1 ответ

Решение

Попробуй это:

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

Я уверен, что есть лучший способ сгруппировать их, чтобы у вас не было предела, чтобы получить коллекцию StatementString, но уже поздно, я с ума схожу, и у меня завтра работа, и это должно сработать.

Другие вопросы по тегам