0

DateTimeオブジェクトを読み取りXML、リマインダー オブジェクトのリストにロードしようとしています。

Datetime.ParseArgument Null Exceptionwithメッセージを投げています:

文字列参照が文字列のインスタンスに設定されていません。

これが私のコードです:

    private void loadReminders()
    {
        var xml = File.ReadAllText("Reminders.xml");
        XmlReader xmlReader = XmlReader.Create(new StringReader(xml));
        while (xmlReader.Read())
        {
            if (xmlReader.Name.Equals("Reminder") && (xmlReader.NodeType == XmlNodeType.Element))
            {
                Reminders.Add(new Reminder(DateTime.Parse(xmlReader.GetAttribute("Time")), xmlReader.GetAttribute("Title"), xmlReader.GetAttribute("Message")));
            }
        }
    }

解析する DateTime 文字列が XML ファイルに明確に格納されているため、この例外がスローされる理由はよくわかりません。

<Reminders>
  <Reminder>
    <Time>2013-7-30 23:24</Time>
   <Title>Random Reminder</Title>
   <Message>Random Message</Message>
  </Reminder>
</Reminders>

どんな助けでも大歓迎です。

4

1 に答える 1

1

Linq を使用してコードを XML に変更する場合は、次のコードを使用できます。

var listTimes = doc.Elements("Reminders").Elements("Reminder").Select(s => s.Element("Time"));

foreach (var item in listTimes)
{
    Console.Write(DateTime.Parse(item.Value, CultureInfo.InvariantCulture));
}

現在のコードでは、次のようなものを使用できます。

XmlReader xmlReader = XmlReader.Create(new StringReader(xml));

while (xmlReader.Read())
{
    if (xmlReader.Name.Equals("Time") && (xmlReader.NodeType == XmlNodeType.Element))
    {
        Console.WriteLine(DateTime.Parse((string)xmlReader.ReadElementContentAs(typeof(string), null), CultureInfo.InvariantCulture));
    }                
}
于 2013-07-31T04:15:51.127 に答える