C# 使用字典解析Xml<;字符串,列表<;MyObject>&燃气轮机;
我正在开发Windows Phone 8应用程序 我有一个如下所示的xml:C# 使用字典解析Xml<;字符串,列表<;MyObject>&燃气轮机;,c#,wpf,xml-parsing,windows-phone,linq-to-xml,C#,Wpf,Xml Parsing,Windows Phone,Linq To Xml,我正在开发Windows Phone 8应用程序 我有一个如下所示的xml: <array> <dict> <key>SubTopics</key> <array> <dict> <key>ID</key> <array>
<array>
<dict>
<key>SubTopics</key>
<array>
<dict>
<key>ID</key>
<array>
<string>CD1</string>
<string>CD2</string>
<string>CD3</string>
<string>CD4</string>
</array>
<key>Title</key>
<string>Miscellaneous</string>
<key>Desc</key>
<string> this is just a text</string>
<key>HasItems</key>
<true/>
</dict>
<dict>
<key>ID</key>
<array>
<string>DDC1</string>
<string>DDC2</string>
<string>DDC3</string>
<string>DDC4</string>
<string>DDC5</string>
</array>
<key>Title</key>
<string>Miscellaneous One</string>
<key>Desc</key>
<string> this is just a text</string>
<key>HasItems</key>
<true/>
</dict>
</array>
<key>MainTitle</key>
<string>Data</string>
</dict>
<dict>
<key>SubTopics</key>
<array>
<dict>
<key>ID</key>
<array>
<string>SSD1</string>
<string>SS2</string>
<string>SS3</string>
<string>SS4</string>
</array>
<key>Title</key>
<string>Goblins</string>
<key>Desc</key>
<string> this is just a text</string>
<key>HasItems</key>
<true/>
</dict>
<dict>
<key>ID</key>
<array>
<string>ADC1</string>
<string>ADC2</string>
<string>ADC3</string>
<string>ADC4</string>
<string>DDC5</string>
</array>
<key>Title</key>
<string>Tracks</string>
<key>Desc</key>
<string> this is just a text</string>
<key>HasItems</key>
<true/>
</dict>
</array>
<key>MainTitle</key>
<string>Data Two</string>
</dict>
</array>
现在在第一个屏幕中,我显示了所有的主要标题
现在,在第一个屏幕中单击主磁贴,我需要该主标题的所有值
那么我如何将这些存储到字典中呢
编辑
我试过这个:
var dict = (from plist in doc.Root.Element("array").Elements("dict")
select new MyObject
{
MainTitle = (string)plist.Element("string"),
ListOfSubTitles = plist.Element("array")
.Elements("dict")
.Elements("string")
.Select(s => (string)s)
.ToList(),
})
.ToDictionary(a => a.MainTitle, a => a.ListOfSubTitles);
但在这里,它还将Desc标记值存储在子标题列表中,我建议使用helper方法。第一个是从奇怪的xml数据格式创建值字典(它使用key
元素值作为字典条目键,下一个节点作为字典条目值):
所有解析将如下所示:
XDocument xdoc = XDocument.Load(path_to_xml);
var result =
xdoc.Root.Elements("dict")
.Select(GetValues)
.ToDictionary(v => (string)v["MainTitle"],
v => v["SubTopics"]
.Elements("dict").Select(ParseMyObject).ToList());
解析结果:
{
"Data": [
{
MainTitle: "Miscellaneous",
ListOfSubTitles: [ "CD1", "CD2", "CD3", "CD4" ]
},
{
MainTitle: "Miscellaneous One",
ListOfSubTitles: [ "DDC1", "DDC2", "DDC3", "DDC4", "DDC5" ]
}
],
"Data Two": [
{
MainTitle: "Goblins",
ListOfSubTitles: [ "SSD1", "SS2", "SS3", "SS4" ]
},
{
MainTitle: "Tracks",
ListOfSubTitles: [ "ADC1", "ADC2", "ADC3", "ADC4", "DDC5" ]
}
]
}
你试过解析这个xml吗?你能展示你的尝试吗?问问你的同学。我确信这至少是第三次。“再也没有人自己做作业了吗?”谢尔盖贝雷佐夫斯基请看我的报告edit@L.B是我的同事在另一家公司工作country@user3114009你决定在这里而不是他?我会试试这个,让你知道,请等一下,应该是数据,子主题,数据两个子主题我们将在第一屏显示数据和数据二,点击数据我需要得到所有的子主题,再次点击每个子主题我需要得到所有的IDOk,谢谢给我2分钟,我将尝试一次,而且现在我可以assing Dictionary dicts=xdoc.Root.Elements(“dict”)。。。对吗?@user3114009是的,结果是Dictionary
static MyObject ParseMyObject(XElement dict)
{
var values = GetValues(dict);
return new MyObject
{
MainTitle = (string)values["Title"],
ListOfSubTitles = values["ID"].Elements().Select(s => (string)s).ToList()
};
}
XDocument xdoc = XDocument.Load(path_to_xml);
var result =
xdoc.Root.Elements("dict")
.Select(GetValues)
.ToDictionary(v => (string)v["MainTitle"],
v => v["SubTopics"]
.Elements("dict").Select(ParseMyObject).ToList());
{
"Data": [
{
MainTitle: "Miscellaneous",
ListOfSubTitles: [ "CD1", "CD2", "CD3", "CD4" ]
},
{
MainTitle: "Miscellaneous One",
ListOfSubTitles: [ "DDC1", "DDC2", "DDC3", "DDC4", "DDC5" ]
}
],
"Data Two": [
{
MainTitle: "Goblins",
ListOfSubTitles: [ "SSD1", "SS2", "SS3", "SS4" ]
},
{
MainTitle: "Tracks",
ListOfSubTitles: [ "ADC1", "ADC2", "ADC3", "ADC4", "DDC5" ]
}
]
}