2012-05-10 10 views
1

選択したインデックスの変更に問題があります。私のxmlファイルには、モジュール番号、モジュール名、assesments、クレジットなどが含まれています。ここで達成しようとしているものは - xml(モジュール名とコード)からlistboxにロードされるコース情報ですが、モジュールが持っている評価。 は、ここに私のXMLファイルのサンプルノード一致の子ノードリストボックス項目数

<module> 
    <moduleCode>ECWM618</moduleCode> 
    <moduleTitle>Semantic and Social Web</moduleTitle> 
    <credits>15</credits> 
    <semester>2</semester> 
    <assessmentDetails> 
     <assessment> 
     <assessmentName>Coursework1</assessmentName> 
     <assessmentType>Coursework</assessmentType> 
     <assessmentWeighting>25</assessmentWeighting> 
     </assessment> 
     <assessment> 
     <assessmentName>Coursework2</assessmentName> 
     <assessmentType>Coursework</assessmentType> 
     <assessmentWeighting>25</assessmentWeighting> 
     </assessment> 
     <assessment> 
     <assessmentName>Exam</assessmentName> 
     <assessmentType>Exam</assessmentType> 
     <assessmentWeighting>50</assessmentWeighting> 
     </assessment> 
    </assessmentDetails> 
    </module> 

されており、ここで私が得たコードのヘルプは感謝

private void moduleSummaryBox_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      // when module from modulelist is selected, it read all indicies assigned to the module. 
      //!!!!!!!! it reads last node only :(? wtf im tired ...lol 
      //    
       // read data from modulelist 
       string path = Directory.GetCurrentDirectory(); 
       FileStream fs = new FileStream(@"myCourse.xml", FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read); 
       XmlReader moduleReader = XmlReader.Create(fs); 
       moduleReader.Read(); 
       while (moduleReader.Read()) 
       { 
        int assessmentNo = 0; 
        bool match = false; 
        moduleReader.MoveToElement(); 

        if (moduleReader.Name == "assessmentName") 
        { 
         moduleReader.Read();// reads xml file. 
         XmlNodeType nType = moduleReader.NodeType; //XmlNodeType Specifies the type of node. If node matches specified name = true. 
         if (nType == XmlNodeType.Text)// if node type match XmlNodeType (and there is some text in it) statement becomes true 
         { 
          this.assno.Text = (moduleReader.Value.ToString()); //set mcode label to matched node.        
         } 
        } 

        if (moduleReader.Value.ToString() == moduleSummaryBox.Items[moduleSummaryBox.SelectedIndex].ToString()) 
        { 
         match = true; 
        } 

        if (match == true) 
        { 
         break;       
        } 


      } 
     } 

はあなたに:)感謝です

EDIT: これは、リストボックスの中に何が起こっている

moduleSummaryBox.Items.Clear(); 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(@"myCourse.xml"); 

      XmlNodeList levelList = doc.GetElementsByTagName("level"+l_level); 
      foreach (XmlNode node in levelList) 
      { 
       XmlElement moduleElement = (XmlElement)node; 
       XmlNodeList modules_individ = moduleElement.GetElementsByTagName("module"); 
       foreach (XmlNode nodes in modules_individ) 
       { 
        XmlElement moduleSeperator = (XmlElement)nodes; 
        string ll_moduleCode = moduleSeperator.GetElementsByTagName("moduleCode")[0].InnerText; 
        string ll_moduleTitle = moduleSeperator.GetElementsByTagName("moduleTitle")[0].InnerText;      
        moduleSummaryBox.Items.Add(ll_moduleCode+" : " + ll_moduleTitle+" "); 
       } 
      } 
+0

リストボックスの正確な内容は?それに含まれる文字列を表示します。問題の内容を質問の一部として記述し、コードのコメントに残さないようにする必要があります。どのような場合でも割り当てノードの数は決して決して決してありません。 – tinman

+0

なぜXPathを使用しないのですか? http://support.microsoft.com/kb/308333/en-us – 2GDev

+0

返信いただきありがとうございます。私は評価の数を数えるように努力しました...しかし、コードはXML内のすべての評価を数えますが、選択された指標の数評価はカウントしません。 –

答えて

0

試すことができますか?次のコードサンプルを使用してください。 -

const string xmlString = 
       "<module><moduleCode>ECWM618</moduleCode><moduleTitle>Semantic and Social Web</moduleTitle><credits>15</credits>" + 
       "<semester>2</semester><assessmentDetails><assessment><assessmentName>Coursework1</assessmentName><assessmentType>Coursework</assessmentType>" + 
       "<assessmentWeighting>25</assessmentWeighting></assessment><assessment><assessmentName>Coursework2</assessmentName><assessmentType>Coursework</assessmentType>" + 
       "<assessmentWeighting>25</assessmentWeighting></assessment><assessment><assessmentName>Exam</assessmentName><assessmentType>Exam</assessmentType><assessmentWeighting>50</assessmentWeighting></assessment></assessmentDetails></module>"; 

      var xml = XElement.Parse(xmlString); 
      var qry = 
       xml.Descendants() 
        .Where(e => e.Name == "moduleCode" && e.Value == "ECWM618") 
        .Ancestors() 
        .Descendants() 
        .Where(e => e.Name == "assessmentDetails") 
        .Elements("assessment").Count(); 
関連する問題