通过按钮从父元素获取 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
}
我有一个包含以下信息的 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
}