Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq解析XML文档时仅获取第一个值_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 使用Linq解析XML文档时仅获取第一个值

C# 使用Linq解析XML文档时仅获取第一个值,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我的XML文件: <tracking> <tracking> <course id="1" name="AGL" nbrecredits="3"> <instructor id="1" name="youssef"> <session date="10-10-2012" num

我的XML文件:

<tracking>
<tracking>
    <course id="1" name="AGL" nbrecredits="3">
        <instructor id="1" name="youssef">
            <session date="10-10-2012" numberOfsessions="1"/>
            <session date="9-10-2012" numberOfsessions="2"/>
            <session date="8-10-2012" numberOfsessions="1"/>
            <session date="7-10-2012" numberOfsessions="1.5"/>
        </instructor>
        <instructor id="2" name="Maroun"/>
            <session date="10-10-2012" numberOfsessions="4"/>
            <session date="9-10-2012" numberOfsessions="1"/>
    </course>
    <course id="2" name="projet de programmationa avancee" nbrecredits="3">
        <instructor id="1" name="youssef">
            <session date="10-10-2012" numberOfsessions="1"/>
            <session date="9-10-2012" numberOfsessions="2"/>
            <session date="8-10-2012" numberOfsessions="1"/>
            <session date="7-10-2012" numberOfsessions="1.5"/>
        </instructor>
    </course>
    <course id="2" name="poo" nbrecredits="3">
        <instructor id="2" name="Maroun">
            <session date="10-10-2012" numberOfsessions="1"/>
            <session date="9-10-2012" numberOfsessions="3"/>
            <session date="8-10-2012" numberOfsessions="1"/>
            <session date="7-10-2012" numberOfsessions="1.5"/>
        </instructor>
        <instructor id="1" name="youssef">
            <session date="10-10-2012" numberOfsessions="1"/>
            <session date="9-10-2012" numberOfsessions="2"/>
            <session date="8-10-2012" numberOfsessions="1"/>
            <session date="7-10-2012" numberOfsessions="2.5"/>
        </instructor>
        <instructor id="2" name="Samir"></instructor>
    </course>
</tracking>
</tracking>
我试着给每门课程的讲师取名字,比如AGL应该给我Youssef和Maroun,但它只给了我YousseftheFirstXML元素。 我甚至试图用IEnumerable homePhone替换var homePhone,但在将其解析为列表时得到了空指针

我还有另一个问题,我想使用Linq和c在我的xml文件中为每个讲师插入新的会话,那么是否有任何方法可以编辑现有的XElement,或者我应该每次创建一个新的XElement


谢谢您的时间。

问题出在您的xml文件中

<tracking>
<tracking>
    <course id="1" name="AGL" nbrecredits="3">
        <instructor id="1" name="youssef">
            <session date="10-10-2012" numberOfsessions="1"/>
            <session date="9-10-2012" numberOfsessions="2"/>
            <session date="8-10-2012" numberOfsessions="1"/>
            <session date="7-10-2012" numberOfsessions="1.5"/>
        </instructor>
        <instructor id="2" name="Maroun"/>
            <session date="10-10-2012" numberOfsessions="4"/>
            <session date="9-10-2012" numberOfsessions="1"/>
        </instructor>   <-- Missing XML end tag!
            

        

问题出在xml文件中

<tracking>
<tracking>
    <course id="1" name="AGL" nbrecredits="3">
        <instructor id="1" name="youssef">
            <session date="10-10-2012" numberOfsessions="1"/>
            <session date="9-10-2012" numberOfsessions="2"/>
            <session date="8-10-2012" numberOfsessions="1"/>
            <session date="7-10-2012" numberOfsessions="1.5"/>
        </instructor>
        <instructor id="2" name="Maroun"/>
            <session date="10-10-2012" numberOfsessions="4"/>
            <session date="9-10-2012" numberOfsessions="1"/>
        </instructor>   <-- Missing XML end tag!
            

        
请尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument xDoc = XDocument.Load(FILENAME);
            List<XElement> homePhone = (from phoneno in xDoc.Descendants("course")
                            where (string)phoneno.Attribute("name") == ("AGL")
                            select phoneno).ToList();

            foreach (XElement instructor in homePhone.Elements("instructor"))
            {
                foreach (XElement session in instructor.Elements("session"))
                {
                    Console.WriteLine("id = '{0}', name = '{1}', credits = '{2}', date = '{3}', number of sessions = '{4}'",
                        (string)instructor.Attribute("id"),
                        (string)instructor.Attribute("name"),
                        (string)instructor.Attribute("nbrecredits"),
                        (string)session.Attribute("date"),
                        (string)session.Attribute("numberOfsessions")
                        );
                }
            }
        }

    }


}
请尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument xDoc = XDocument.Load(FILENAME);
            List<XElement> homePhone = (from phoneno in xDoc.Descendants("course")
                            where (string)phoneno.Attribute("name") == ("AGL")
                            select phoneno).ToList();

            foreach (XElement instructor in homePhone.Elements("instructor"))
            {
                foreach (XElement session in instructor.Elements("session"))
                {
                    Console.WriteLine("id = '{0}', name = '{1}', credits = '{2}', date = '{3}', number of sessions = '{4}'",
                        (string)instructor.Attribute("id"),
                        (string)instructor.Attribute("name"),
                        (string)instructor.Attribute("nbrecredits"),
                        (string)session.Attribute("date"),
                        (string)session.Attribute("numberOfsessions")
                        );
                }
            }
        }

    }


}

谢谢你,你是个救生员谢谢你,你是个救生员