C# 使用C语言解析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>

我正在Windows Phone中运行一个应用程序,并尝试解析如下所示的XML:

    <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概念,因此它适用于任何嵌套数据类型。