0

XMLファイルはこんな感じで、このように約20個のノード(モジュール)があります。

<list>
<module code="ECSE502">
<code>ECSE502</code>
<name>Algorithms and Data structures</name>
<semester>1</semester>
<prerequisites>none</prerequisites>
<lslot>0</lslot>
<tslot>1</tslot>
<description>all about algorythms and data structers with totorials and inclass tests</description>
</module>    
</list>

次のコードを実行しました。しかし、私がそれをデバッグしたとき、 foreach 関数にさえ入っていませんでした。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace ModuleEnrolmentCW
{
    class XMLRead
    {

        public string[] writeToXML(string s)
        {
            string text = s;           
            string[] arr = new string[6];

            XmlDocument xml = new XmlDocument();
            xml.Load("modules.xml");

            XmlNodeList xnList = xml.SelectNodes("list/module[@code='" + text + "']");
            foreach (XmlNode xn in xnList)
            {
                arr[0] = xn.SelectSingleNode("code").InnerText;
                arr[1] = xn.SelectSingleNode("name").InnerText;
                arr[2] = xn.SelectSingleNode("semester").InnerText;
                arr[3] = xn.SelectSingleNode("prerequisites").InnerText;
                arr[4] = xn.SelectSingleNode("lslot").InnerText;
                arr[5] = xn.SelectSingleNode("tslot").InnerText;                            
            }

            return arr;
        }


    }
}

どこが悪いのか教えてください??

ここに残りのコードがあります

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ModuleEnrolmentCW
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string selected;
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            XMLRead x = new XMLRead();
            selected = (string)listBox1.SelectedItem;
            string[] arr2 = x.writeToXML(selected);

            label11.Text = arr2[0];

        }
    }
}
4

4 に答える 4

1

この行:

XmlNodeList xnList = xml.SelectNodes("list/module[@code='" + text + "']");

読む必要があります:

XmlNodeList xnList = xml.SelectNodes("list/module"); //Does not answer full scope of the question

質問を読み直して編集します。

OP のコードは、私のテストでは正常に動作します。ファイル パスが正しくないか、string s渡された がノードを読み取る値textの大文字と小文字が一致します。Code

あなたSelectNodes XPathが持っているように、大文字と小文字が区別されます。

XPath V1.0 を使用しているように見えますが、それが問題である場合、すぐに使える大文字と小文字の区別をサポートしていないようです。大文字と小文字を区別しない XPath 検索を実行する方法については、このリンクを参照してください: http://blogs.msdn.com/b/shjin/archive/2005/07/22/442025.aspx

このリンクも参照してください: xpath で大文字と小文字を区別しない一致?

于 2013-03-29T09:55:20.567 に答える
1

xml ファイルの正しいパスを指定していることを確認してください。

それは私のために働いています。

ここに画像の説明を入力

于 2013-03-29T09:56:46.307 に答える
1

入力が実際に表示されたものでありs 、実際の現在のコードを指している場合、コードは正しいです。相対パスでファイルを指定しているため、実際に期待するファイルをロードしていることを確認してください。

于 2013-03-29T09:58:31.767 に答える
0

エラーが見つかりました。writeToXML メソッドに間違った値を渡していました。コードを渡す代わりに、名前を渡しました

于 2013-03-29T10:24:56.180 に答える