C# 当存在具有Null属性的元素时,XML不再正确读取

C# 当存在具有Null属性的元素时,XML不再正确读取,c#,xml,unity3d,C#,Xml,Unity3d,我有一个.xml文件,它可以通过多种方式进行修改和读取,但是,当添加一个属性比其他属性少的元素时,很多代码就不再工作了 .xml文件的一般结构如下所示: <?xml version="1.0" encoding="utf-8"?> <Records> <Export_Number>1</Export_Number> <Current_Activity_Number>4</Current_Activity_Number>

我有一个.xml文件,它可以通过多种方式进行修改和读取,但是,当添加一个属性比其他属性少的元素时,很多代码就不再工作了

.xml文件的一般结构如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Records>
  <Export_Number>1</Export_Number>
  <Current_Activity_Number>4</Current_Activity_Number>
  <Activities>
    <Activity ID="1" Section="Section1" Type="Type1">
      <Date>10/9/2011</Date>
      <Details>Details go here</Details>
    </Activity>
    <Activity ID="2" Section="Unlisted">
      <Date>12/09/2008</Date>
      <Details>Details go here</Details>
      <Notes>Notes go here</Details>
    </Activity>
  </Activities>
</Records>
等等

错误消息将问题突出显示为这段代码的orderby部分:

    var all =
        from objActs in xDocument.Element("Records").Element("Activities").Descendants("Activity")
            let actDate = DateTime.Now - DateTime.ParseExact(objActs.Element("Date").Value,"d/M/yyyy",new CultureInfo("en-GB"))
            orderby actDate
            select objActs;
问题3-[Exporter.cs]只能在错误发生之前写入(到.txt)零件。尽管如上所述,它表示错误发生在日期排序部分,但它似乎实际发生在
file.WriteLine(objActs.Element(“date”).Value+lineBreak)
中,因为在此之前写入的.txt文件的所有部分都出现在文件中


我明白,只要更改代码,使每个条目都有一个type属性,即使其值为“null”或“n/a”,也可以工作。但我觉得必须有一个更好的解决方案,而且我知道在未来的某些情况下,这样的解决方案是不可行的。我已经为此挠头有一段时间了,如果有任何想法,我将不胜感激。

问题1:activityNumber绝对不是空的吗?@Eraph Nope,它在代码中使用之前会打印到控制台两次。我从未见过一个条目保存为空值。当它在
if(p.Attribute(“ID”).value==activityNumber.ToString())
上中断时,您能看看
p
并确保它是您所期望的元素类型吗?@Eraph我会在if语句前一行打印p,并在其中打印p的ID值。if循环之前的p打印每个数据输入活动,包括所有属性和子元素。在存在Type属性的情况下,if循环中的p打印正确的ID号。相当奇怪的是,它似乎不再导致上面列出的任何错误,这让我感到非常困惑。
    var all =
        from objActs in xDocument.Element("Records").Element("Activities").Descendants("Activity")
            let actDate = DateTime.Now - DateTime.ParseExact(objActs.Element("Date").Value,"d/M/yyyy",new CultureInfo("en-GB"))
            orderby actDate
            select objActs;