Как я могу выбрать все подузлы узла, а не всех потомков?

1

У меня есть следующий XML:

<...>
  <...>
    <tabular>
        <time from="2014-05-22T10:00:00" to="2014-05-22T12:00:00" period="1">
          <symbol number="3" numberEx="3" var="03d" />
          <precipitation value="0" />
          <windDirection deg="191.8" code="SSW" />
          <windSpeed mps="1.3" />
          <temperature unit="celsius" value="16" />
          <pressure unit="hPa" value="1010.6" />
        </time>
        <time from="2014-05-22T10:00:00" to="2014-05-22T12:00:00" period="1">
          <symbol number="3" numberEx="3" var="03d" />
          <precipitation value="0" />
          <windDirection deg="191.8" code="SSW" />
          <windSpeed mps="1.3" />
          <temperature unit="celsius" value="16" />
          <pressure unit="hPa" value="1010.6" />
        </time>
        <time from="2014-05-22T10:00:00" to="2014-05-22T12:00:00" period="1">
          <symbol number="3" numberEx="3" var="03d" />
          <precipitation value="0" />
          <windDirection deg="191.8" code="SSW" />
          <windSpeed mps="1.3" />
          <temperature unit="celsius" value="16" />
          <pressure unit="hPa" value="1010.6" />
        </time>

Мне удалось с LINQ получить табличный список:

var tabular = doc.Root.Descendants("tabular").ToList();

табличное число теперь 1. Я хочу, чтобы список детей из таблиц. Я попробовал дополнительный потомок:

var tabular = doc.Root.Descendants("tabular").Descendants().ToList();

Но это возвращает список каждого потомка таблицы, в результате чего список, в котором время, символ, осадки и т.д. Входит в список. Как я могу получить список, в котором список содержит временные узлы таблицы?

Я хочу список всех временных узлов, поэтому я могу сериализовать его на объект и получить доступ к значениям

Теги:
linq
linq-to-xml

1 ответ

4

Используйте Elements вместо Descendants если вы хотите получить только прямых детей из tabular

var tabular = doc.Root.Descendants("tabular").Elements().ToList();

UPDATE: подсказки для разбора элементов времени на объекты

var times =
    from t in xdoc.Descendants("tabular").Elements()
    let symbol = t.Element("symbol")
    let temperature = t.Element("temperature")
    select new
    {
        From = (DateTime)t.Attribute("from"),
        To = (DateTime)t.Attribute("to"),
        Period = (int)t.Attribute("period"),
        Symbol = new
        {
            Number = (int)symbol.Attribute("number"),
            NumberEx = (int)symbol.Attribute("numberEx"),
            Var = (string)symbol.Attribute("var")
        },
        Precipitation = (int)t.Element("precipitation").Attribute("value"),
        WindSpeed = (double)t.Element("windSpeed").Attribute("mps"),
        Temperature = new
        {
            Unit = (string)temperature.Attribute("unit"),
            Value = (string)temperature.Attribute("value")
        }
    };

Вывод:

[
  {
    From: "2014-05-22T10:00:00",
    To: "2014-05-22T12:00:00",
    Period: 1,
    Symbol: { Number: 3, NumberEx: 3, Var: "03d" },
    Precipitation: 0,
    WindSpeed: 1.3,
    Temperature: { Unit: "celsius", Value: "16" }
  },
  // ...
]
  • 1
    Я согласен с вами, это должно работать.
  • 0
    Вау ... это было легко. Пропустил эту функцию. Чтобы сериализовать это, я должен создать объект, который имеет те же объекты / свойства элемента <time>?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню