XML-анализ объекта внутри списка объектов внутри объекта с использованием LINQ - PullRequest
0 голосов
/ 13 февраля 2019

ФАЙЛ XML

<Lines>
    <LineEntity>
      <Id>33947</Id>
      <Name>SEC_137438957044</Name>
      <IsUnderground>true</IsUnderground>
      <R>0.209</R>
      <ConductorMaterial>Steel</ConductorMaterial>
      <LineType>Cable</LineType>
      <ThermalConstantHeat>2400</ThermalConstantHeat>
      <FirstEnd>41990</FirstEnd>
      <SecondEnd>41992</SecondEnd>
      <Vertices>
        <Point>
          <X>407566.68007470988</X>
          <Y>5013899.3558040857</Y>
        </Point>
        <Point>
          <X>407625.00589398207</X>
          <Y>5013876.8697334668</Y>
        </Point>
        <Point>
          <X>407717.51971015992</X>
          <Y>5014160.9525629422</Y>
        </Point>
        <Point>
          <X>407559.40091708023</X>
          <Y>5014220.4665799234</Y>
        </Point>
      </Vertices>
    </LineEntity>
</Lines>

Я хочу получить этот Vertices объект с точками, но я не знаю, как к нему добраться.Что я пробовал до сих пор:

var lines = xdoc.Descendants("LineEntity")
                 .Select(line => new Line
    {
        Id = (double)line.Element("Id"),
        Name = (string)line.Element("Name"),
        ConductorMaterial = (string)line.Element("ConductorMaterial"),
        IsUnderground = (bool)line.Element("IsUnderground"),
        R = (decimal)line.Element("R"),
        FirstEnd = (int)line.Element("FirstEnd"),
        SecondEnd = (int)line.Element("SecondEnd"),
        LineType = (string)line.Element("LineType"),
        ThermalConstantHeat = (int)line.Element("ThermalConstantHeat"),
        Vertices = line.Descendants("Vertices").Select(p => new Point {
        X = (decimal)p. //can't access Element
    })
}).ToList();

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Это код:

 ThermalConstantHeat = (int)line.Element("ThermalConstantHeat"),
 Vertices = line.Element("Vertices").Descendants("Point").Select(p => new TokenController.Point
 {
     X = (decimal)p.Element("X"),
     Y = (decimal)p.Element("Y")//can't access Element
 }).ToList()

Сначала необходимо найти Элемент ("Вершины") , а затем найти Потомки ("Точка") Список

0 голосов
/ 13 февраля 2019

Вам необходимо выбрать Elements из Point внутри Elements из Vertices как

var lines = xdoc.Descendants("LineEntity")
    .Select(line => new Line
    {
        //Your rest of code same here

        Vertices = line.Elements("Vertices").Elements("Point").Select(p => new Point 
        {
            X = (decimal)p.Element("X"),
            Y = (decimal)p.Element("Y"),
        }).ToList()
    }).ToList();

Выход: (из отладчика)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...