惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
罗磊的独立博客
爱范儿
爱范儿
J
Java Code Geeks
博客园 - 司徒正美
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
小众软件
小众软件
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Jina AI
Jina AI
Y
Y Combinator Blog
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
Vercel News
Vercel News

博客园 - GDLMO

给12306的建议 在delphi中引用第三方控件时,找不到dcu的解决办法 使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列 在sqlserver中使用bcp自动导出数据的方法和注意事项 无法识别的属性“requirePermission” sqlserver,将视图或表的记录不重复的插入到另一个表 让单元测试项目也能同步测试主程序的APP.CONFIG Sqlserver 插入一条记录时,不重复插入的办法 dnn5.5.1的配置 动态生成ASP.NET按钮时要注意的一个问题 关于EditUrl与NavigateURL的调用问题 DNN常用的几种页面跳转(EditUrl和Globals.NavigateURL) The Auto option has been disabled as the DotNetNuke Application cannot connect to a valid SQL Server database SQLite3中TimeStamp的使用问题 博文阅读密码验证 - 博客园 在DNN中使用SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)始终无法获得返回值 在DNN中使用jQuery的插件Validate Enter Null Values for DateTime Column of SQL Server(转) Web.Config和Sql Server2005连接字符串总结(转)
水平太差,虽然认为Linq是个好东东,但有谁能教教我,怎么调试?
GDLMO · 2011-03-17 · via 博客园 - GDLMO

想做个通过XML做配置的方案,使用Linq

<?xml version="1.0" encoding="utf-8"?>
<root>
    
<schedules>
        
<idle>3600000</idle>
        
<schedule>
            
<dic>e:\</dic>
            
<schedulename>dhdp</schedulename>
            
<configfile>dhdpconfig.xml</configfile>
        
</schedule>
        
<schedule>
            
<dic>e:\</dic>
            
<schedulename>logdhdp</schedulename>
            
<configfile>logdhdpconfig.xml</configfile>
        
</schedule>
    
</schedules>
</root>

class Schedule 
    {
        
public string dic { getset; }
        
public string schedulename { getset; }
        
public string configfile { getset; }
    }
    
class Schedules
    {
        
public int Idle { getset; }
        
public List<Schedule> ScheduleList { getset; }        
    }

    class Program
    {
        
static void Main(string[] args)
        {
            
            var xmlfn 
= @"Schedules.xml";        
            TestScheduleList(xmlfn);
            TestSchedulesList(xmlfn);
            TestSchedulesList2(xmlfn);
            Console.ReadKey();
        }
        
public static void TestScheduleList(string xmlfn)
        {
            XElement SchedulesXml 
= XElement.Load(xmlfn);

            List

<Schedule> ScheduleList = (
                from ScheduleElement 
in SchedulesXml.Elements("schedules").Descendants("schedule")
                select 
new Schedule
                {
                    dic 
= ScheduleElement.Element("dic").Value,
                    schedulename 
= ScheduleElement.Element("schedulename").Value,
                    configfile 
= ScheduleElement.Element("configfile").Value                   
                }
            ).ToList();
            Console.WriteLine(
"测试ScheduleList");
            
foreach (var sc in ScheduleList)
            {
                Console.WriteLine(sc.configfile);
            }
            Console.ReadKey();
        }
        
public static void TestSchedulesList(string xmlfn)
        {
            XElement SchedulesXml 
= XElement.Load(xmlfn);
            var SchedulesList 
= from SchedulesElement in SchedulesXml.Elements("schedules")
                                select SchedulesElement;
            Console.WriteLine(
"测试SchedulesList");
            
foreach (var scs in SchedulesList)
            {
                Console.WriteLine(scs.Value);
            }
            Console.ReadKey();
        }
        
public static void TestSchedulesList2(string xmlfn)
        {
            XElement SchedulesXml 
= XElement.Load(xmlfn);
            var SchedulesList 
= from SchedulesElement in SchedulesXml.Elements("schedules")
                                select 
new Schedules
                                {
                                    Idle 
= (int)SchedulesElement.Element("Idle"),
                                    ScheduleList 
= (
                                        from ScheduleElement 
in SchedulesElement.Descendants("schedule")
                                        select 
new Schedule
                                        {
                                            dic 
= ScheduleElement.Element("dic").Value,
                                            schedulename 
= ScheduleElement.Element("schedulename").Value,
                                            configfile 
= ScheduleElement.Element("configfile").Value                                           
                                        }
                                     ).ToList()
                                };
            Console.WriteLine(
"测试SchedulesList");
            
foreach (var scs in SchedulesList)
            {
                Console.WriteLine(scs.ScheduleList.ToString());
            }
            Console.ReadKey();
        }
    }

在使用TestSchedulesList2有错误,不知怎样调试,错误如下:

未处理 System.ArgumentNullException
  Message="值不能为空。\r\n参数名: element"
  Source="System.Xml.Linq"
  ParamName="element"
  StackTrace:
       在 System.Xml.Linq.XElement.op_Explicit(XElement element)
       在 ConsoleApplication1.Program.<TestSchedulesList2>b__7(XElement SchedulesElement) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 170
       在 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       在 ConsoleApplication1.Program.TestSchedulesList2(String xmlfn) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 186
       在 ConsoleApplication1.Program.Main(String[] args) 位置 D:\web\ConsoleApplication1\ConsoleApplication1\Program.cs:行号 129
       在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       在 System.Threading.ThreadHelper.ThreadStart()
  InnerException:

经过大家的提醒,终于找到原因了,XML是要区分大小写的,我将idle写成了Idle了,改后运行正常了。

public static void TestSchedulesList2(string xmlfn)
        {
            XElement SchedulesXml 
= XElement.Load(xmlfn);
            var SchedulesList 
= from SchedulesElement in SchedulesXml.Elements("schedules")
               select 
new Schedules
                {
                    Idle 
= int.Parse(SchedulesElement.Element("idle").Value),
                    ScheduleList 
=
                        (from ScheduleElement 
in SchedulesElement.Descendants("schedule")
                            select 
new Schedule
                            {
                                dic 
= ScheduleElement.Element("dic").Value,
                                schedulename 
= ScheduleElement.Element("schedulename").Value,
                                configfile 
= ScheduleElement.Element("configfile").Value
                             
}
                         ).ToList()
                };
            Console.WriteLine(
"测试SchedulesList");
            
foreach (var scs in SchedulesList)
            {
                Console.WriteLine(scs.ScheduleList[
0].schedulename);
            }
            Console.ReadKey();
        }