簡體   English   中英

通過按鈕將父元素的xml子元素獲取到新表單

[英]Get xml child elements from parent via button to new form

我有一個包含以下信息的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
 <AssessmentForm title="MACHINE-NAME Assessment">
    <Title>MACHINE-NAME Assessment</Title>
    <AssessmentSections>
      <AssessmentSection sectionNameID="SECTION_ONE" sectionGroupID="0">
        <SectionName>SECTION_NUMBER_1</SectionName>
        <SectionDescription>Description of Section to go here</SectionDescription>
        <SectionItems>
          <SectionItem itemNameID="ITEM_ONE" itemID="0" itemGroupID="0">
            <ItemName>Item One</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
          <SectionItem itemNameID="ITEM_TWO" itemID="1" itemGroupID="0">
            <ItemName>Item Two</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
          <SectionItem itemNameID="ITEM_THREE" itemID="2" itemGroupID="0">
            <ItemName>Item Three</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
        </SectionItems>
      </AssessmentSection>
      <AssessmentSection sectionNameID="SECTION_TWO" sectionGroupID="1">
        <SectionName>SECTION_NUMBER_2</SectionName>
        <SectionDescription>Description of Section to go here</SectionDescription>
        <SectionItems>
          <SectionItem itemNameID="ITEM_ONE" itemID="0" itemGroupID="1">
            <ItemName>Item One</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
          <SectionItem itemNameID="ITEM_TWO" itemID="1" itemGroupID="1">
            <ItemName>Item Two</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
          <SectionItem itemNameID="ITEM_THREE" itemID="2" itemGroupID="1">
            <ItemName>Item Three</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
        </SectionItems>
      </AssessmentSection>
      <AssessmentSection sectionNameID="SECTION_THREE" sectionGroupID="2">
        <SectionName>SECTION_NUMBER_2</SectionName>
        <SectionDescription>Description of Section to go here</SectionDescription>
        <SectionItems>
          <SectionItem itemNameID="ITEM_ONE" itemID="0" itemGroupID="2">
            <ItemName>Item One</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
          <SectionItem itemNameID="ITEM_TWO" itemID="1" itemGroupID="2">
            <ItemName>Item Two</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
          <SectionItem itemNameID="ITEM_THREE" itemID="2" itemGroupID="2">
            <ItemName>Item Three</ItemName>
            <Significance>Description of Item to go here</Significance>
            <Result />
          </SectionItem>
        </SectionItems>
      </AssessmentSection>
    </AssessmentSections>
</AssessmentForm>

通過執行以下操作,我設法使用LINQ獲得了子元素:

var menu = (from m in doc.Root.Descendants("AssessmentSections").Descendants("AssessmentSection")
                    select new
                    {
                        sectionID = Convert.ToInt32(m.Attribute("sectionGroupID").Value),
                        sectionName = m.Attribute("sectionNameID").Value,
                        sectionItems = (from sub in doc.Descendants("SectionItems").Descendants("SectionItem")
                                        where Convert.ToInt32(sub.Attribute("itemGroupID").Value).Equals(Convert.ToInt32(m.Attribute("sectionGroupID").Value))
                                        select new
                                        {
                                            itemGroupID = Convert.ToInt32(sub.Attribute("itemGroupID").Value),
                                            itemID = Convert.ToInt32(sub.Attribute("itemID").Value),
                                            itemName = sub.Element("ItemName").Value,
                                            itemResult = sub.Element("Result").Value
                                        }).ToArray()
                    }).ToArray();

但是,我的問題是為正確的父級獲取正確的子級元素。 我當前的代碼:

foreach (var m in menu)
            {
                //display m in button array
            }
            foreach (var sub in m.sectionItems)
            {
                //display sub in textbox & combobox array
            }

我的問題是,當我單擊“第1部分”按鈕時,如何從“第1部分”中顯示所有子項,其他部分的子元素也是如此?

您必須在節點的屬性值上添加檢查。

例如,僅獲取第1節,這應該起作用:

var section1 = (from m in doc.Root.Descendants("AssessmentSections").Descendants("AssessmentSection")
                where m.Attribute("sectionNameID").Value == "SECTION_ONE"
                select m);
XElement sectionOne = doc.Descendants(namespace + "AssessmentSection").First(x => x.Attribute("sectionNameID").Value.Equals("SECTION_ONE"));
        IEnumerable<XElement> elements = sectionOne.Elements(namespace + "SectionItem");

        foreach (XElement element in elements) 
        {
            //Do something
        }

我做了這樣的事情,希望對您有所幫助

對於那些感興趣的人,我使用以下方法得到了結果:

foreach (var m in menu)
            {
                //display button array
            }
            foreach (var sectionItem in m.sectionItems.Where(x => x.itemGroupID == m.sectionID))
            {
                //display sub in textbox & combobox array
            }

暫無
暫無

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

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