简体   繁体   中英

XML file reading into array, printing it out - While loop not working

I am trying to read an XML file into an array and then print it out, however, for some reason it only works if my while has only one argument.

The conditions that I am trying to use: while (xtr.Name != "Vakarinis" || xtr.Name != "Dieninis") It keeps looping forever. However, if I only specify while (xtr.Name != "Vakarinis") it works perfectly, and reads the <Vakarinis> elements. I tried using |, ||, brackets, but nothing worked. What couldbe the problem?

The code:

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


namespace xml
{
    class Program
    {
        static void Main(string[] args)
        {

            Studentai s = new Studentai();  

            XmlTextReader xtr = new XmlTextReader("Uzduotis.xml");
            xtr.WhitespaceHandling = WhitespaceHandling.None;
            xtr.Read();

            while (!xtr.EOF) 
            {
                if (xtr.Name == "studentai" && !xtr.IsStartElement()) break;


                // NOT WORKING --------------------------------------------
                while (xtr.Name != "Vakarinis" || xtr.Name != "Dieninis")
                // NOT WORKING --------------------------------------------


                {

                        Console.WriteLine(xtr.Name);
                        xtr.Read(); 

                } 


                Studentas tc = new Studentas(); 
                tc.laikas = xtr.Name;
                Console.WriteLine(tc.laikas);
                tc.id = xtr.GetAttribute("id");          
                Console.WriteLine(tc.id);
                tc.vardas = xtr.GetAttribute("vardas");
                Console.WriteLine(tc.vardas);
                xtr.Read();                              
                xtr.Read();

                tc.modulis1 = xtr.Name;
                Console.WriteLine(tc.modulis1);
                xtr.Read();
                tc.paz1 = xtr.ReadElementString("paz1"); 
                Console.WriteLine(tc.paz1);
                tc.paz2 = xtr.ReadElementString("paz2"); 
                Console.WriteLine(tc.paz2);
                xtr.Read();                             

                tc.modulis2 = xtr.Name;
                Console.WriteLine(tc.modulis2);
                xtr.Read();
                tc.paz3 = xtr.ReadElementString("paz1");
                Console.WriteLine(tc.paz3);
                tc.paz4 = xtr.ReadElementString("paz2"); 
                Console.WriteLine(tc.paz4);
                xtr.Read();
                xtr.Read();
                tc.vidurkis = xtr.ReadElementString("vidurkis"); 
                Console.WriteLine(tc.vidurkis);
                s.items.Add(tc); 
                xtr.Read(); 
                Console.Read();
            } 

            xtr.Close(); 
            s.Display(); 


        }
    }

    public class Studentas
    {
        public string laikas;
        public string id;
        public string vardas;
        public string modulis1;
        public string paz1;
        public string paz2;
        public string modulis2;
        public string paz3;
        public string paz4;
        public string vidurkis;
    }

    public class Studentai
    {
        public ArrayList items = new ArrayList();
        public void Display()
        {
            foreach (Studentas tc in items)
            {
                Console.Write(tc.laikas + " " + tc.id + " " + tc.vardas + " " + tc.modulis1 + " " + tc.paz1 + " " + tc.paz2);
                Console.WriteLine(tc.modulis2 + " " + tc.paz3 + " " + tc.paz4 + " " + tc.vidurkis);

            }

            Console.ReadLine();
        }
    }
}

The XML file:

  <Vakarinis id="36453" vardas="Petras">
    <pazymiai>
      <matematika>
        <paz1>5</paz1>
        <paz2>7</paz2>
      </matematika>
      <technologija>
        <paz1>8</paz1>
        <paz2>4</paz2>
      </technologija>
    </pazymiai>
    <vidurkis>6.00</vidurkis>
  </Vakarinis>

  <Dieninis id="75643" vardas="Jonas">
    <pazymiai>
      <matematika>
        <paz1>8</paz1>
        <paz2>7</paz2>
      </matematika>
      <fizika>
        <paz1>7</paz1>
        <paz2>10</paz2>
      </fizika>
    </pazymiai>
    <vidurkis>8</vidurkis>
  </Dieninis>

  <Dieninis id="48843" vardas="Andrius">
    <pazymiai>
      <matematika>
        <paz1>5</paz1>
        <paz2>5</paz2>
      </matematika>
      <fizika>
        <paz1>5</paz1>
        <paz2>7</paz2>
      </fizika>
    </pazymiai>
    <vidurkis>5.50</vidurkis>
  </Dieninis>

  <Vakarinis id="56442" vardas="Antanas">
    <pazymiai>
      <matematika>
        <paz1>8</paz1>
        <paz2>8</paz2>
      </matematika>
      <technologija>
        <paz1>8</paz1>
        <paz2>10</paz2>
      </technologija>
    </pazymiai>
    <vidurkis>8.50</vidurkis>
  </Vakarinis>

</studentai>

I believe you need to change

while (xtr.Name != "Vakarinis" || xtr.Name != "Dieninis")

to:

while ((xtr.Name != "Vakarinis") && (xtr.Name != "Dieninis"))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM