Xml使用LINQ在对象内部的对象列表中解析对象

时间:2019-02-13 05:42:34

标签: c# xml linq parsing

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>

我想用Points获得这个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 :(得分:2)

这是代码:

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

您必须先找到 Element(“ Vertices”),然后才能找到 Descendants(“ Point”)列表

答案 1 :(得分:1)

您需要在Elements的{​​{1}}中选择Point的{​​{1}},例如

Elements

输出:(来自调试器)

enter image description here