0

listBox1Windowsフォームでは、パネルにいくつかのラベルがあり、フォルダーから(.rtdl)ファイルのコレクションをロードする場所から静的値を表示したいと思います。

labelsユーザーがそれぞれを選択すると、対応する属性値をパネルに表示したいと思います。

listBox1 に入力するコード:

private void Form1_Load(object sender, EventArgs e)
        {
            PopulateListBox(listBox1, @"C:\TestLoadFiles\", "*.rtdl");
        }

        private void PopulateListBox(ListBox lsb, string Folder, string FileType)
        {
            DirectoryInfo dinfo = new DirectoryInfo(Folder);
            FileInfo[] Files = dinfo.GetFiles(FileType);
            foreach (FileInfo file in Files)
            {
                lsb.Items.Add(file);
            }
        }

listBox1 からファイルを読み取るコード:

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            FileInfo file = (FileInfo)listBox1.SelectedItem;
            DisplayFile(file.FullName);

            string path = (string)listBox1.SelectedItem;
            DisplayFile(path);
        }

        private void DisplayFile(string path)
        {
            string xmldoc = File.ReadAllText(path);

            using (XmlReader reader = XmlReader.Create(xmldoc))
            {

                while (reader.MoveToNextAttribute())
                {
                    switch (reader.Name)
                    {
                        case "description":
                            if (!string.IsNullOrEmpty(reader.Value))
                                label5.Text = reader.Value; // your label name
                            break;
                        case "sourceId":
                            if (!string.IsNullOrEmpty(reader.Value))
                                label6.Text = reader.Value; // your label name
                            break;
                        // ... continue for each label
                    }
                }
            }
        }

ファイルを選択すると、このエラーが にスローillegal characters in pathされusing (XmlReader reader = XmlReader.Create(xmldoc))ます。

ここで何が間違っているのか教えてください???

4

1 に答える 1

2

XmlReader.Create(string)実際のテキスト文字列ではなく、入力(またはストリーム)としてパスを取ります。http: //msdn.microsoft.com/en-us/library/w8k674bf.aspxを参照してください。

したがって、次の行を削除してください。

string xmldoc = File.ReadAllText(path);

そしてこれをDisplayFile変更します:

using (XmlReader reader = XmlReader.Create(xmldoc))

これに:

using (XmlReader reader = XmlReader.Create(path))

そうは言っても、あなたは非常に難しい方法で物事をやっています。LINQ to XMLは、達成しようとしていることに対してはるかに単純です。

DisplayFile代わりにこれを試してください:

private void DisplayFile(string path)
{
    var doc = XDocument.Load(path);
    var ns = doc.Root.GetDefaultNamespace();    
    var conn = doc.Root.Element(ns + "connection");

    label5.Text = conn.Element(ns + "description").Value;
    label6.Text = conn.Element(ns + "sourceId").Value;

    // and so on
}
于 2012-05-10T07:30:56.447 に答える