2

私はイライラしています。私はxmlファイルで遊んでいます。これが私の自動的に作成されたxmlファイルです:

<Files>
<Lists>
    <oList>
      <Object>
        <Name>test1</Name>
        <DateCreated>2/11/2013 4:35:05 PM</DateCreated>
        <DateDeadline>2/17/2013 12:00:00 AM</DateDeadline>
        <Reward>none</Reward>
        <Description>chocolate amedei 9</Description>
      </Object>
    </oList>
  </Lists>
</Files>

後でファイルを拡張したいので、最初の多くの開始要素がそこにある必要があります。そこで、このxmlファイルを読み取って、xmlファイルに格納されているパラメーターを正確に必要とするクラスのオブジェクト(ThingsToDoObjects、いつかやることリストになるはずです)を作成したいと思います。このオブジェクトはリストに保存する必要があります。だからこれは私がこれまでに持っているものです:

XmlDocument xmlListDoc = new XmlDocument();
            xmlListDoc.Load(xmlFilePath);
            foreach (XmlNode xnode in xmlListDoc.SelectNodes("Files/Lists/oList/Object"))
            {
                string n = xnode.SelectSingleNode("Name").InnerText.ToString();
                DateTime c = Convert.ToDateTime(xnode.SelectSingleNode("DateCreated").InnerText.ToString());
                DateTime d = Convert.ToDateTime(xnode.SelectSingleNode("DateDeadline").InnerText.ToString());

                string r = xnode.SelectSingleNode("Reward").InnerText.ToString();
                string de = xnode.SelectSingleNode("Description").InnerText.ToString();
                ThingsToDoObjects NeuObject = new ThingsToDoObjects(n, c, d, r, de);
                o.Add(NeuObject);
            }

ここで、デバッグすると、次のことが起こります。nは正常に作成され、cは正常に作成されます。しかし、dは機能しません。エラーが発生します。

「文字列が有効な日時として認識されませんでした」

(これはドイツ語からの私の翻訳なので、エラーは少し違うと呼ばれるかもしれません。そこで何が起こっているのでしょうか?私はちょうどいくつかの愚かな間違いをしたことを願っています。

ちなみに、私はこのParseExactly()方法を試しましたが、どちらも機能せず、同じエラーが発生しました。

答えてくれた皆さん、よろしくお願いします。

4

3 に答える 3

4

(XML形式自体は変更できないと思います。dtbで提案されているように、標準形式を使用する方がはるかに優れています。)

既知の形式のテキストがある場合は、DateTime.ParseExactまたはを使用しますDateTime.TryParseExact。あなたがそれらに正しいフォーマットを与えれば、それらは機能します。私は通常、これらの場合の解析にも不変のカルチャを使用します。ユーザーカルチャの日付区切り文字などが混乱することは望ましくありません。この場合、必要なフォーマット文字列はです"M/d/yyyy h:mm:ss tt"

サンプルコード:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        string text = "2/17/2013 12:00:00 AM";
        string format = "M/d/yyyy h:mm:ss tt";
        DateTime value = DateTime.ParseExact(text, format,
                                             CultureInfo.InvariantCulture,
                                             DateTimeStyles.None);
        Console.WriteLine(value);
    }
}

可能であれば、LINQtoXMLを使用することも強くお勧めします。これにより、XML処理が現在のコードよりもはるかに簡単になります。

于 2013-02-11T15:51:58.490 に答える
1

あなたがドイツ語からの翻訳について言及したので、私はあなたがドイツにいると仮定するつもりです。あなたはおそらく日付を「あなた」として解析しようとしています。つまり、日付はドイツのカルチャーフォーマッター(dd / mm / yyyy)を使用して解析されており、解析する17か月目はありません。

代わりにこれを使用してみてください:

Convert.ToDateTime(value, CultureInfo.InvariantCulture.DateTimeFormat);
于 2013-02-11T16:07:49.860 に答える
0

XMLで日付/時刻の値をフォーマットする標準的な方法があります:

<DateCreated>2013-11-02T04:35:05</DateCreated>

XmlConvert.ToDateTimeメソッドを使用してこの形式を解析できます。

DateTime result = XmlConvert.ToDateTime("2013-11-02T04:35:05",
                                        XmlDateTimeSerializationMode.Utc);

または、さらに良いことに、LINQからXMLを見て、 XElementからDateTimeへの明示的な変換を使用してください。

DateTime result = (DateTime)obj.Element("DateCreated");
于 2013-02-11T15:54:03.477 に答える