Beispiel 5: daten2.xml

13.12.2016 05:31 Uhr
#include <iostream>

using namespace std;
#include <fstream>

int main()
{
char zeichen;
char puffer[100];
int zaehler;
int zustand;
/* Dabei möge gelten:
   zustand = 0 : Wir sind "zwischen den Tags".
   zustand = 1 : Wir bearbeiten einen Tagnamen.
   zustand = 2 : Wir erwarten einen Attributnamen.
   zustand = 3 : Wir erwarten einen Attributwert.
   zustand = 4 : Wir verarbeiten einen Attributwert. */

ifstream eingabe;

eingabe.open("daten2.xml");

for (zaehler=0,zustand=0;;)
    {
    eingabe.get(zeichen);
    if (eingabe.eof()) break;

   switch(zeichen)
      {
   case '<':
      zustand=1;
      zaehler=0;
      break;

   case '>':
      zustand=0;
      break;

   case ' ':
// Wenn wir bisher einen Tagnamen gelesen haben, endet er.
      if (zustand == 1)
         {
         zustand = 2;
         puffer[zaehler] = '\0';
         cout << "Name des Tags: " << puffer << endl;
         zaehler=0;
         }
      else if (zustand == 4)
         {
         puffer[zaehler] = zeichen;
         zaehler++;
         }
      break;

   case '=':
      if (zustand == 2)
         {
         zustand = 3;
         puffer[zaehler] = '\0';
         cout << "Name des Attributs: " << puffer << endl;
         zaehler=0;
         }
      else if (zustand == 4)
         {
         puffer[zaehler] = zeichen;
         zaehler++;
         }
      else cout << "Fehlerhaftes Zeichen! '='" << endl;
      break;

   case '"':
      if (zustand == 3) 
         {
         zustand = 4;
         zaehler = 0;
         }
      else if (zustand == 4)
         {
         zustand = 2;
         puffer[zaehler] = '\0';
         cout << "Wert des Attributs: " << puffer << endl;
         zaehler=0;
         }
      else cout << "Fehlerhaftes Zeichen! '\"'" << endl;
      break;

   default:
      if (zustand != 0)
         {
         puffer[zaehler] = zeichen;
         zaehler++;
         }
      break;
      }
   }
eingabe.close();
}

Anhang: example5.zip

Schlagwörter: