在C#中,我试图创建一个数组数组,或者可以使用XML数据将其称为锯齿状数组。但我完全糊涂了如何开始
XML示例
<?xml version="1.0" encoding="utf-8"?>
<MAIN>
<Items>
<Name>name1</Name>
<Data>data1</Data>
<Category>category1</Category>
</Items>
<Items>
<Name>name2</Name>
<Data>data2</Data>
<Category>category2</Category>
</Items>
<Items>
<Name>name3</Name>
<Data>data3</Data>
<Category>category2</Category>//same category as above
</Items>
...
...
<Items>
<Name>name20</Name>
<Data>data20</Data>
<Category>category16</Category>
</Items>
</MAIN>
现在我需要创建一个包含category1,category2,...的数组,直到类别节点上的类别,需要创建每个类别的单独数组来存储项目名称和数据,以便我可以检索它们我的用途。
从上面的示例xml我需要在单个数组中使用相同的类别项
项目和类别计数是完全动态的。 如何动态地做到这一点?
答案 0 :(得分:2)
你可以用linq
来做var categorized = xe.Descendants("Items")
.GroupBy(x => x.Element("Category").Value)
.Select(x => new
{
Category = x.Key,
Items = x.ToList()
}).ToList();
您会将Items
个Category
元素添加到组中。
然后,您将在组中选择Category
和Items
。
它将为您返回List<{Category, List<Items>}>
这是分类结构的样子
[
{
"Category": "category1",
"Items": [
{
"Items": {
"Name": "name1",
"Data": "data1",
"Category": "category1"
}
}
]
},
{
"Category": "category2",
"Items": [
{
"Items": {
"Name": "name2",
"Data": "data2",
"Category": "category2"
}
},
{
"Items": {
"Name": "name3",
"Data": "data3",
"Category": "category2",
"#text": "//same category as above\n "
}
}
]
},
{
"Category": "category16",
"Items": [
{
"Items": {
"Name": "name20",
"Data": "data20",
"Category": "category16"
}
}
]
}
]