[英]Xml file reading using XML to LINQ in C#
我有一個具有以下結構的xml文件(Sample.xml)
<RootElement>
<Children>
<Child Name="FirstChild" Start="0" End="2">
<Sibling Name="Test1" />
<Sibling Name="Test2" />
<AdditionalSibling Name="Add_Test_1" />
<AdditionalSibling Name="Add_Test_2" />
<MissingSibling Name="Miss_Test_1" />
<MissingSibling Name="Miss_Test_2" /
</Child>
<Child Name="SecondChild" Start="0" End="2">
<Sibling Name="Test3" />
<Sibling Name="Test4" />
</Child>
<Child Name="ThirdChild" Start="0" End="2">
<Sibling Name="Test5" />
<Sibling Name="Test6" />
</Child>
<Child Name="FourthChild" Start="0" End="2">
<Sibling Name="Test7" />
<Sibling Name="Test8" />
</Child>
<Child Name="FifthChild" Start="0" End="2">
<Sibling Name="Test9" />
<Sibling Name="Test10" />
</Child>
<Child Name="SixthChild" Start="0" End="2">
<Sibling Name="Test11" />
<Sibling Name="Test12" />
</Child>
<MatchedChilds>
<Child Name="FirstChild" />
<Child Name="SecondChild" />
<Child Name="ThirdChild" />
<Child Name="FourthChild" />
<Child Name="FifthChild" />
<Child Name="SixthChild" />
</MatchedChilds>
</Children>
</RootElement>
我需要讀取直接位於“ RootElement”下的元素“ Child”的屬性值
現在我正在使用LINQ查詢
List<string> lst = (from element in XDocument.Load(Application.StartupPath + "\\Sample.xml")
.Descendants("Child")
group element by element.Attribute("Name").Value into KeyGroup select KeyGroup.Key )
.ToList();
但是它將返回文件中所有“子”元素的“名稱”的屬性值。
請給我一個更好的解決方案,以使用XML到LINQ
提前致謝
使用這樣的東西:
XDocument doc = XDocument.Load(Application.StartupPath + "\\Sample.xml");
List<string> lst = doc.Root.Elements("Child")
.Select(x => (string) x.Attribute("Name"))
.ToList();
注意使用Elements()
代替Descendants()
。 這將為您提供所有名稱屬性。 我不清楚您為什么要在原始示例代碼中進行分組,但是希望這能使您順利進行。
您按名稱分組 ,因此列表中將包含名稱元素。 您可以按以下方式查詢和迭代結果:
var query = from element in XDocument.Load(Application.StartupPath + "\\Sample.xml")
.Descendants("Child")
group element by element.Attribute("Name").Value into KeyGroup
select new { Grouping = KeyGroup.Key, Children = KeyGroup };
和迭代
foreach(var namekey in query)
{
Console.WriteLine(namekey.Grouping);
foreach(var child in namekey.Children)
{
Console.WriteLine(child.whatever);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.