簡體   English   中英

使用XML.LINQ(C#)幫助閱讀遞歸XML

[英]Help reading recursive XML using XML.LINQ (C#)

我剛開始使用LINQ,但在理解如何從XML文件遞歸讀取時遇到了兩個問題

如果我有類似的XML

> <ProjectTemplates>
>   <ProjectTemplate Name="Standard">
>         <DeliverableTemplates>
>           <DeliverableTemplate Name="Each Deliverable">
>             <DependantDeliverables>
>               <DeliverableTemplate Name="Can Have a Collection">
>                 <DependantDeliverables>
>                   <DeliverableTemplate Name="of dependant deliverables">
>                     <DependantDeliverables>
>                       <DeliverableTemplate Name="recursively">
>                         <DependantDeliverables />
>                       </DeliverableTemplate>
>                     </DependantDeliverables>
>                   </DeliverableTemplate>
>                 </DependantDeliverables>
>               </DeliverableTemplate>
>             </DependantDeliverables>
>           </DeliverableTemplate>
>         </DependantDeliverables>
>       </DeliverableTemplate>
>     </DependantDeliverables>
>   </DeliverableTemplate>
> </ProjectTemplates>

我正在嘗試將其讀入幾個非常簡單的類中

internal class Project
{
    public string Name;
    public List<Deliverable> Deliverables;
}
internal class Deliverable
{
    public string Name;
    public List<Deliverable> DependantDeliverables;

    public Deliverable()
    {
        DependantDeliverables = new List<Deliverable>();
    }
}

但是我真的不確定如何去做。 據我所知

var xmlProjects = XElement.Load(XMLPath);
var projecttemplates =
(
    from el in xmlProjects.Elements("ProjectTemplates").Elements("ProjectTemplate")
    select new Project
    {
        Name = el.Attribute("Name").Value,
        Deliverables =
        (
            from elDeliverables in el.Elements("DeliverableTemplates").Elements("DeliverableTemplate")
            select new Deliverable
            {
                Name = elDeliverables.Attribute("Name").Value,
                DependantDeliverables = new List<Deliverable>()   
            }
        ).ToList<Deliverable>()
    }
).ToList<Project>();

我在構建DependantDeliverables列表時遇到問題。 我什至不確定我是否可以像這樣的單一聲明來做到這一點。

有人可以幫忙嗎?

傑森

我將更改Deliverable類,以便其構造函數采用對應於給定<DeliverableTemplate>XElement 然后,該構造函數將負責遍歷XElement,查找子代,填充List <>,並調用其他構造函數,進一步傳入更多XElement,直到到達並解析所有節點為止。

暫無
暫無

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

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