我現在有一個是這樣的(空白和橢圓增加了可讀性)一個XML文件格式:C#的LINQ to XML - 解析嵌套的對象列表
<root>
<Module> //Start with list of Modules
<ModuleParams>
</ModuleParams>
</Module>
...
<DetectLine> //Now a list of DetectLines
<DetectLineParams>
</DetectLineParams>
<Channels> //List of Channels embedded in each DetectLine
<Channel>
<ChannelParams>
</ChannelParams>
</Channel>
...
</Channels>
</DetectLine>
...
</root>
類結構如下:
public class Module
{
public ModuleParams { get; set; }
}
public class DetectLine
{
public DetectLineParams { get; set; }
public List<Channel> Channels { get; set; }
}
public class Channel
{
public ChannelParams { get; set; }
}
模塊和檢測線列表很容易用Linq解析XML。但是,解析每個DetectLine的頻道列表對我來說並不那麼明顯。這甚至可以用Linq到XML來完成嗎?我寧願不必重構結構以使用XMLSerializer。
初始代碼(OpenXML的一個打開文件對話框已經簽好名。):
List<Module> myModules;
List<DetectLine> myDetectLines;
XDocument config = XDocument.Load(openXML.FileName);
myModules =
(from myElements in config.Descendants("Module")
select new Module()
{
ModuleParam1 = (string)myElements.Element("ModuleParam1"),
ModuleParam2 = (string)myElements.Element("ModuleParam2"),
...
}).ToList<Module>();
myDetectLines =
(from myElements in config.Descendants("DetectLine")
select new DetectLine()
{
DetectLineParam1 = (string)myElements.Element("ModuleParam1"),
DetectLineParam2 = (string)myElements.Element("ModuleParam2"),
...
// ?? Add Channels list here somehow...
}).ToList<DetectLine>();
給使用你的模塊和DetectLines – MarcinJuraszek
我的理由代碼保持類,所以一般是因爲實際參數均達到我(這是我定義和保存的程序的配置文件,這種格式使得手動讀取/調試/寫入變得容易)。我已經添加了我當前的解析方法來顯示我在找什麼。我不需要有人自己解決XML或類,只是建議使用Linq查詢進行解析。 – Bandoth