首页 > 解决方案 > 在 C# 中使用 Linq 同时读取两个 xml 文件

问题描述

我正在尝试同时循环 2 个 xml 文件并加载到自定义 JobModel 对象列表中。我在jobs.ToList() 调用上收到NullReferenceException,显然我的Linq 表达式不正确并且作业枚举为空。

第一个xml文件

tasks.xml 
<objects>
  <object id="X001">
    <property name="jobDetail" />
    <property name="cronExpressionString" value="0 00 00 ? * MON-FRI" />
  </object>
  <object id="Addf8ae09bf7a47a891114b8246e3108d">
    <property name="jobDetail" ref="TaskExecutor" />
    <property name="cronExpressionString" value="0 00 18 ? * MON,TUE,WED,THU,FRI *" />
  </object>
</objects>

第二个xml文件

details.xml
<Tasks>
  <Task id="X001">
    <name>task_1</name>
    <desc>desc_1</desc>       
  </Task>  
  <Task id="Addf8ae09bf7a47a891114b8246e3108d">
    <name>task_2</name>
    <desc>desc_2</desc>    
  </Task>
</Tasks>

这是我尝试过的各种组合

XDocument tasks = XDocument.Load(@"tasks.xml");
XDocument details = XDocument.Load(@"details.xml");
var jobs = from t in tasks.Root.Elements()
              join d in details.Root.Elements() on t.Attribute("id").Value equals d.Attribute("id").Value
              select new JobModel
            {
                Id = (string)t.Attribute("id").Value,

                CronExpression = t.Descendants("property")
                   .Where(x => (string)x.Attribute("name") == "cronExpressionString")
                   .Select(x => (string)x.Element("value"))
                   .FirstOrDefault()
            };

jobs.ToList();

任何帮助深表感谢。谢谢你。

标签: c#xmllinq

解决方案


推荐阅读