簡體   English   中英

Linq to XML選擇所有父項和子項

[英]Linq to XML Select All Parent and Child Items

我正在嘗試將Linq to XML查詢的結果綁定到DataList控件,並且我無法返回所有子值。 這是我的XML ...

<categories>
  <category>
    <parent-id>1234</parent-id>
    <parent-name>Parent 1</parent-name>
    <children>
      <child-cat>
        <child-id>5678</child-id>
        <child-name>Child 1</child-name>
      </child-cat>
      <child-cat>
        <child-id>2824</child-id>
        <child-name>Child 2</child-name>
      </child-cat>
      <child-cat>
        <child-id>2831</child-id>
        <child-name>Child 3</child-name>
      </child-cat>
    </children>
  </category>
  <category>
    <parent-id>6398</parent-id>
    <parent-name>Parent 2</parent-name>
    <children>
      <child-cat>
        <child-id>5564</child-id>
        <child-name>Child 1</child-name>
      </child-cat>
      <child-cat>
        <child-id>2824</child-id>
        <child-name>Child 2</child-name>
      </child-cat>
      <child-cat>
        <child-id>2831</child-id>
        <child-name>Child 3</child-name>
      </child-cat>
    </children>
  </category>

這是我的Linq查詢...

var categories = XDocument.Load(Server.MapPath("/app_data/ShoppingCategories.xml"));
        var allCats = from category in categories.Root.Descendants("category")
             select new
                      {
                          parentId = category.Descendants("parent-id").First().Value,
                          parentName = category.Descendants("parent-name").First().Value,
                          childId = category.Descendants("child-cat").First().Value,
                          childName = category.Descendants("child-name").First().Value
                      };
        dtlstCategories.DataSource = allCats; 
        dtlstCategories.DataBind();

我的輸出看起來像這樣(我只顯示父名和子名字段,id字段被綁定到隱藏字段)...

父母1父母2
孩子1孩子2

因為我在子元素上使用.First(),我意識到這就是為什么只有第一個顯示,但我似乎無法弄清楚如何讓它們全部顯示。 這就是我追求的......

父母1父母2
兒童1兒童1
孩子2孩子2
孩子3孩子3

看起來我已經非常接近得到我想要的東西,但我無法將它們捆綁在一起。 任何幫助表示贊賞!

編輯

這是我的DataList ......

<asp:DataList ID="dtlstCategories" runat="server" OnItemDataBound="dtlstCategories_ItemDataBound" Visible="True" RepeatColumns="5" RepeatDirection="Vertical" RepeatLayout="Table" ItemStyle-Wrap="True" BorderWidth="0" ItemStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top" ItemStyle-Width="170">
        <ItemTemplate>
            <div style="padding-left:10px; padding-right:10px;">    
                <asp:HiddenField ID="hdnTopCategoryId" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "parentId") %>' />
                <asp:LinkButton ID="lnkTopCategory" runat="server" CssClass="support" Text='<%#DataBinder.Eval(Container.DataItem, "parentName") %>'></asp:LinkButton>
                <asp:Image ID="imgCatDivider" runat="server" />
                <asp:HiddenField ID="hdnChildCatId" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "childId") %>' />
                <asp:LinkButton ID="lnkChildName" runat="server" CssClass="support" Text='<%#DataBinder.Eval(Container.DataItem, "childName") %>'></asp:LinkButton>
            </div>
        </ItemTemplate>
    </asp:DataList>

我會寫這樣的東西

var allCats = categories.Descendants("child-cat")
    .Select(c => new
    {
        parentId = c.Parent.Parent.Element("parent-id").Value,
        parentName = c.Parent.Parent.Element("parent-name").Value,
        childId = c.Element("child-id").Value,
        childName = c.Element("child-name").Value
    })
    .ToList();

暫無
暫無

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

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