【问题标题】:Only getting the first value while parsing an XML document using Linq使用 Linq 解析 XML 文档时只获取第一个值
【发布时间】:2020-10-13 22:00:59
【问题描述】:

我的 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>

根据这个 XML,我想计算每门课程和每位讲师的剩余课程(考虑到每门课程有 15 个课程)。 因此,首先我想获取第一门课程(AGL)中每位讲师的课程数量。我的问题是我只能获得其numberOfsessions 等于1 的第一个会话。

使用这个 c# 代码:

var xDoc = XDocument.Load(@"C:\Users\Gaby\Desktop\a.xml");

var homePhone = from phoneno in xDoc.Root.Element("tracking").Elements("course")
                where phoneno.Attribute("name").Value.Equals("AGL")
                select phoneno;

foreach (XElement xEle in homePhone)
{
    Console.WriteLine(xEle.Element("instructor").Element("session").Attribute("numberOfsessions").Value);
}

我尝试获取每门课程的讲师姓名(例如“AGL”应该让我得到“Youssef”和“Maroun”,但它只让我得到“Youssef”(第一个 xml 元素)。 我什至尝试将var homePhone 替换为IEnumerable&lt;string&gt; homePhone,但在将其解析为列表时得到了一个空指针。

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

感谢您的宝贵时间。

【问题讨论】:

    标签: c# xml linq linq-to-xml


    【解决方案1】:

    尝试以下:

    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")
                            );
                    }
                }
            }
    
        }
    
    
    }
    

    【讨论】:

    • 谢谢你,你是救生员
    【解决方案2】:

    问题出在您的 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!
                
    
            
    

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2021-08-16
      • 2023-04-02
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2013-03-31
      相关资源
      最近更新 更多