簡體   English   中英

Xml使用LINQ解析對象內部對象列表內的對象

[英]Xml parse object inside of list of objects inside object using LINQ

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

這是代碼:

 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”)列表

你需要選擇Vertices ElementsPoint Elements

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

輸出:(來自調試器)

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM