簡體   English   中英

c#列表內的列表XML Linq

[英]c# List inside list XML Linq

我有以下聲明

xdoc.Descendants("Father").Select(p => new
    {
        Son1 = (string)p.Element("Son1").Value,
        Son2 = (string)p.Element("Son2").Value,
        Son3= (string)p.Element("Son3").Value,
        Son4 = (string)p.Element("Son4").Value,
        Son5 = (string)p.Element("Son5").Value

    }).ToList().ForEach(p =>
    {

        Response.Write("Son1= " + p.Son1 + "  ");
        Response.Write("Son2=" + p.Son2 + "  ");
        Response.Write("Son3=" + p.Son3 + "  ");
        Response.Write(("Son4 =") + p.Son4 + "  ");
        Response.Write(("Son5 =") + p.Son5 + "  ");
        Response.Write("<br />");
    });

只要我每個兒子只有一個實例,它就可以正常工作,問題是我有多個Son5實例,而且我不知道如何將Son5放入列表中

這是我的XML代碼示例:

在此處輸入圖片說明

如果您有多個相同類型的元素,則應將它們解析為列表或其他集合:

var fathers = from f in xdoc.Descendants("Father")
              select new {
                Son1 = (string)f.Element("Son1"),
                Son2 = (string)f.Element("Son2"),
                Son3= (string)f.Element("Son3"),
                Son4 = (string)f.Element("Son4"),
                Son5 = f.Elements("Son5").Select(s5 => (string)s5).ToList()
             };

一些注意事項:

  • 不要使用.ValueXElementXAttribute -你可以施放元素本身對相應的數據類型,而無需訪問它的值。 好處-更少的代碼,在缺少元素的情況下更可靠(您不會獲得NullReferenceException)
  • 考慮使用int還是int? 如果元素包含整數值,則作為元素值
  • 如果您只有一個Father元素,則不要使用父親集合。 只需獲取xml root並檢查其是否為null。 之后,您可以創建單個father對象。

寫作回應

foreach(var father in fathers)
{
     Response.Write($"Son1={father.Son1}  ");
     Response.Write($"Son2={father.Son2}  ");
     Response.Write($"Son3={father.Son3}  ");
     Response.Write($"Son4={father.Son4}  ");     
     Response.Write(String.Join("  ", father.Son5.Select(son5 => $"Son5={son5}"));    
     Response.Write("<br />");  
}

嘗試這個:

xdoc.Descendants("Father").Select(p => new
{
    Son1 = p.Element("Son1").Value,
    Son2 = p.Element("Son2").Value,
    Son3= p.Element("Son3").Value,
    Son4 = p.Element("Son4").Value,
    Sons5 = p.Elements("Son5").Select(element => element.Value).ToList()

}).ToList().ForEach(p =>
{

    Response.Write("Son1= " + p.Son1 + "  ");
    Response.Write("Son2=" + p.Son2 + "  ");
    Response.Write("Son3=" + p.Son3 + "  ");
    Response.Write("Son4 =" + p.Son4 + "  ");
    p.Sons5.ForEach(son5 => Response.Write("Son5 =" + son5 + "  "));
    Response.Write("<br />");
});

這將在項目列表中創建一個Son5列表,您可以在ForEach使用另一個ForEach進行迭代。

暫無
暫無

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

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