[C] - Teilstring

Sinc

Mitglied
Ich habe Probleme beim Speichern von Teilstrings.

Folgende Datei lese ich zeilenweise in ein mehrdimensionales Array ein:
Code:
<auto>
	<typ>
			<t_marke>Nissan</o_marke>
			<t_farbe>silber</o_farbe>
			<t_preis>5500</o_preis>
	</typ>
	<typ>
			<t_marke>Audi</t_marke>
			<t_farbe>grün</t_farbe>
			<t_preis>6700</t_preis>
			<t_optional_besitzer>Mustermann</t_optional_besitzer>
	</typ>
</auto>
Wie kann ich die rot markierten Werte speichern?
Da die Werte unterschiedlich sind, kann ich strstr() hier ja nicht nutzen.
 
Hi.

Da würde sich natürlich ein XML Parser wie z.B. libxml (http://xmlsoft.org/) anbieten.

Ansonsten müßtest du die XML Tags durchgehen. Z.B. zuerst das Start-Tag "typ" identifizieren und merken. Dann solange noch kein "typ" End-Tag kommt die Tags die da drin sind verarbeiten und z.B. in einer Struktur speichern. Dazu kannst du ja nach den Kleiner/Größer-als-Zeichen suchen.

Gruß
 
Der Link mag bei mir nicht funktionieren. Trotzdem danke.

Bis jetzt hab ich mir die XML-Datei mithilfe von Flags gemerkt:
C:
if (strstr(Zeilentext[i], "<auto>") != NULL) f_auto=1;
if (strstr(Zeilentext[i], "</auto>") != NULL) f_auto=0;	
if (strstr(Zeilentext[i], "<typ>") != NULL) f_typ=1;
if (strstr(Zeilentext[i], "</typ>") != NULL) f_typ=0;
usw...

Doch wie lese ich jetzt in der Zeile <t_marke>Nissan</o_marke>, Nissan aus?
Muss ich da echt nach dem 1. ">" und dem 2. "<" suchen?
 
Sinc hat gesagt.:
Der Link mag bei mir nicht funktionieren. Trotzdem danke.
Also bei mir geht's. Evtl. ein temporäres Verbindungsproblem?

Sinc hat gesagt.:
Bis jetzt hab ich mir die XML-Datei mithilfe von Flags gemerkt:
C:
if (strstr(Zeilentext[i], "<auto>") != NULL) f_auto=1;
if (strstr(Zeilentext[i], "</auto>") != NULL) f_auto=0;	
if (strstr(Zeilentext[i], "<typ>") != NULL) f_typ=1;
if (strstr(Zeilentext[i], "</typ>") != NULL) f_typ=0;
usw...

Doch wie lese ich jetzt in der Zeile <t_marke>Nissan</o_marke>, Nissan aus?
Muss ich da echt nach dem 1. ">" und dem 2. "<" suchen?
Also normalerweise würde man das anders machen. XML Dateien sind relativ einfach strukturiert (und normalerweise spielen Zeilenumbrüche keine Rolle) so das man einen relativ einfachen Parser schreiben könnte.

Du könntest ja nach dem quick'n'dirty Prinzip jede Zeile innerhalb eines Typ-Tags nach "<t_marke>" und "</t_marke>" und allen anderen Tags analog durchsuchen. strstr liefert dir ja den Anfang von dem gesuchten Wort. So könntest du eben mit strncpy dann die Werte zwischen dem Start- und End-Tag extrahieren.

Gruß
 
Kannst du mir ein Beispiel geben.
Meine Version wollte nicht so recht,
C:
strncpy(teststring, strstr(string, suchstring));
 
Na, erstmal mußt du ja schauen ob es überhaupt drin ist und dann mußt du natürlich die Länge des Suchstring noch dazurechnen.
C:
char *stag = "<t_marke>";
char *etag = "</t_marke>";

char *anf, *end;

if ((anf = strstr (zeile, stag)) != NULL) {
  anf += strlen(stag);

  if ((end = strstr (anf, etag)) != NULL) {
    char wert[512];
    strncpy (wert, anf, end - anf);
    wert[end - anf] = '\0';
    ...
  }
}

Gruß
 
Zurück