1

XML ファイルの読み取りに問題があります。私が書いたメソッドは、非常に特定の行の後で停止するようです (ステップスルーすると、その行の後にさらにコードがあるにもかかわらず、その行を実行した後に停止します)。

XML:

<?xml version="1.0" encoding="utf-8"?>
<Timers>
  <Timer title="Test" x="998" y="197" width="500" height="83" opacity="1" ontop="False">
    <Year>2013</Year>
    <Day>29</Day>
    <Hour>12</Hour>
    <Minute>19</Minute>
    <Second>25</Second>
    <Millisecond>101</Millisecond>
    <Note />
  </Timer>
</Timers>

方法:

public bool LoadTimers()
        {
            if (File.Exists(Path.GetDirectoryName(Application.ExecutablePath) + "\\data.pts"))
            {
                bool foundTimer = false;

                XmlDocument doc = new XmlDocument();
                doc.Load(Path.GetDirectoryName(Application.ExecutablePath) + "\\data.pts");

                foreach (XmlNode node in doc.DocumentElement)
                {
                    if (node.NodeType == XmlNodeType.Element && node.Name == "Timer")
                    {
                        //Create a new timer.
                        Form1 form = new Form1(this);
                        form.Show();

                        form.TimerName = node.Attributes["title"].Value.ToString();
                        form.Left = int.Parse(node.Attributes["x"].Value.ToString());
                        form.Top = int.Parse(node.Attributes["y"].Value.ToString());
                        form.Width = int.Parse(node.Attributes["width"].Value.ToString());
                        form.Height = int.Parse(node.Attributes["height"].Value.ToString());
                        form.Opacity = double.Parse(node.Attributes["opacity"].Value.ToString());
                        form.TopMost = bool.Parse(node.Attributes["ontop"].Value.ToString());

                        //Date.
                        int year = 0, day = 0, hour = 0, minute = 0, second = 0, millisecond = 0;
                        string note = "";
                        foreach (XmlNode dateNode in node.ChildNodes)
                        {
                            if (dateNode.NodeType == XmlNodeType.Element)
                            {
                                if (dateNode.Name == "Year") year = int.Parse(dateNode.Value);
                                if (dateNode.Name == "Day") day = int.Parse(dateNode.Value);
                                if (dateNode.Name == "Hour") hour = int.Parse(dateNode.Value);
                                if (dateNode.Name == "Minute") minute = int.Parse(dateNode.Value);
                                if (dateNode.Name == "Second") second = int.Parse(dateNode.Value);
                                if (dateNode.Name == "Millisecond") millisecond = int.Parse(dateNode.Value);
                                if (dateNode.Name == "Note") note = dateNode.Value;
                            }
                        }

                        foundTimer = true;
                    }
                }

                return foundTimer;
            }

            return false;
        }

停止する行は次のとおりです。

if (dateNode.Name == "Year") year = int.Parse(dateNode.Value);

if ステートメントは true であり、「year = int.Parse(dateNode.Value);」を実行します。しかしそこから続かない。メソッドの実行を停止するだけです。

4

1 に答える 1

0

あなたのコードを試してみましたが、はい、dateNode値がないため ArgumentNullException がスローされます。読み取ろうとしているデータは、プロパティInnerTextとに格納されていますInnerXml

どこでも交換

int.Parse(dateNode.Value);

為に

int.Parse(dateNode.InnerText);
于 2013-08-29T10:42:29.593 に答える