C# 使用C语言解析Windows Phone中的XML
我正在Windows Phone中运行一个应用程序,并尝试解析如下所示的XML:C# 使用C语言解析Windows Phone中的XML,c#,xml,windows-phone,C#,Xml,Windows Phone,我正在Windows Phone中运行一个应用程序,并尝试解析如下所示的XML: <book> <chapter no="1"> <title> X </title> <activity no = "1"> A </activity> <activity no = "2"> B </activity>
<book>
<chapter no="1">
<title> X </title>
<activity no = "1"> A </activity>
<activity no = "2"> B </activity>
</chapter>
<chapter no="2">
<title> Y </title>
<activity no = "1"> C </activity>
<activity no = "2"> D </activity>
</chapter>
<chapter no="3">
<title> Z </title>
<activity no = "1"> E </activity>
<activity no = "2"> F </activity>
</chapter>
</book>
1 C
2 D
我现在的代码如下所示
var x = XElement.Load("Data/Book.xml");
listBox1.ItemsSource = from xml in x.Descendants("chapter")
where (string)xml.Attribute("no") == "2"
select new Item
{
ActivityNo = xml.Element("activity").
Attribute("no").Value,
Activity = xml.Element("activity").Value,
};
但是,对于我的代码,它只返回的第一个实例。如果删除stringxml.Attributeno==2的行,则返回A、C和E
我遗漏了什么?诚然,这可能不是第一次使用XML,但我已经被困了几个小时。不过,XML结构不是我的强项,如果您对创建XML文件有任何建议,我将不胜感激。您需要选择节点的活动子体,并使用它来创建项目:
var items = from xml in x.Descendants("chapter")
where (string)xml.Attribute("no") == "2"
from act in xml.Descendants("activity")
select new Item
{
ActivityNo = act.
Attribute("no").Value,
Activity = act.Value,
};
是的,实际的XML有引号。编辑我的问题来解决它。它成功了!谢谢你,我不知道你可以从语句中执行多个操作。看来我必须更多地练习XML解析。或者我应该更好地重构我的XML吗?@CCCC我认为您的XML没有问题,只要结构与您的数据布局相匹配。multiple-from语法是一个LINQ概念,因此它适用于任何嵌套数据类型。