1

XML コードが保存されていないように見え、印刷しても何も起こりません。リストボックスにロードされる前に間違ってロードされるため、何が問題なのかわかりません。コードは以下のとおりです。私の XML 読み取りの目的は、値をリストに格納し、選択したタグを取得してリストボックスに追加することです。

String workingDir = Directory.GetCurrentDirectory();

XmlTextReader textReader = new XmlTextReader(workingDir + @"\XML.xml");
textReader.Read();
XmlNodeType type;

while (textReader.Read())
{
    textReader.MoveToElement();
    type = textReader.NodeType;
    if (type == XmlNodeType.Text)
    {

        if (textReader.Name == "Code")
        {
            textReader.Read();
            code = textReader.Value;
            Console.WriteLine(code);
        }
        if (textReader.Name == "Name")
        {
            textReader.Read();
            name = textReader.Value;
            Console.WriteLine(name);
        }
        if (textReader.Name == "Semester")
        {
            textReader.Read();
            semester = textReader.Value;
            Console.WriteLine(semester);
        }
        if (textReader.Name == "Prerequisite")
        {
            textReader.Read();
            preReq = textReader.Value;
            Console.WriteLine(code);
        }
        if (textReader.Name == "LectureSlot")
        {
            textReader.Read();
            lSlot = textReader.Value;
            Console.WriteLine(lSlot);
        }
        if (textReader.Name == "TutorialSlot")
        {
            textReader.Read();
            tSlot = textReader.Value;
            Console.WriteLine(tSlot);
        }
        if (textReader.Name == "Info")
        {
            textReader.Read();
            info = textReader.Value;
            module.Add(new modules(name, code, semester, tSlot, lSlot, info, preReq));
        }
    }

    foreach (object o in module)
    {
        modules m = (modules)o;
        String hold = m.mName;
        selectionBox.Items.Add(hold);
    }
}
4

2 に答える 2

2

問題は、 を探すことですがtype == XmlNodeType.Text、テキスト ノードには名前がなく、一致するテキスト ノードはありませんtextReader.Name == "Code"

textReader.Name最後のノードからtype == XmlNodeType.Element変数に保存し、ノードを見つけたときに保存された名前を使用する必要がありますXmlNodeType.Text

于 2013-03-12T20:47:54.717 に答える
0

最も可能性の高い理由は、各 if ステートメントでtextReader.Read(). ほとんどReaderの s では、現在のアイテムではなく、次のアイテムが読み取られます。

他の答えが言ったように、要素を見Nameて値を読み取る必要があります。

代わりに次のようなものを検討してください。

while (textReader.Read())
    {
        textReader.MoveToElement();
        type = textReader.NodeType;
        if (type == XmlNodeType.Element)
        {
            textReader.Read();
            switch( textReader.Name )
            {
               case "Code":
                  code = textReader.Value;
                  break;
               case "Name":
                  name = textReader.Value;
                  break;
               //SNIP
               case "Info":
                  info = textReader.Value;
                  module.Add(new modules(name, code, semester, tSlot, lSlot, info, preReq));
                  break;
               default:
                  //Whatever you do here
                  break;
             }
             Console.WriteLine(textReader.Value);
        }
        foreach (object o in module)
        {
            modules m = (modules)o;
            String hold = m.mName;
            selectionBox.Items.Add(hold);
        }


    }

このように、XMLTextReader は反復ごとに 1 つのノードのみを読み取るため、if チェックの回数が大幅に減ります。これが、switch ケースが設計された状況です。

于 2013-03-12T20:52:30.500 に答える