Witam.
Przedstawię najpierw problem, który muszę rozwiązać. Mam stworzyć program (Turbo Pascal), który będzie wczytywał i zapisywał pliki XML. Do tej pory mam stworzony program, który obsługuje drzewa wielokierunkowe, w których mogę przechowywać tagi oraz wartości a także listę atrybutów. Ale w tej chwili jest to mniej ważne.
Co w tej chwili mam zrobione?
Dla testów stworzyłem plik XML składający się z jednej linijki, w której jest takie "pseudo" XML:
</model> <kolor>Niebieski</kolor> <marka>opel <waga>20000</waga></marka> j<cena>1000</cena> <wlasciciel>nie</wlasciciel>
I w tej chwili programik potrafi odczytać wszystko poza zagnieżdżonymi tagami - i w tym przypadku tag "waga" ląduje wraz z wartością jako wartość marki.
WriteLn('Ladowanie z drzewa');
Assign(Tekst, 'plik.txt');
Reset(Tekst);
ReadLn(Tekst, Ciag);
Close(Tekst);
repeat
UsunP(Ciag, 1, Pos('<', Ciag) - 1); {usuniecie wszystkiego do <}
Start:= Pos('<', Ciag);
Koniec:= Pos('>', Ciag);
if Start <> 0 then
if Koniec <> 0 then
begin
if Ciag[Start + 1] = '/' then {tag zamkniety np. </marka>}
begin
for I := Start + 2 to Koniec - 1 do
Tag := Tag + Ciag[I];
Temp := '</' + Tag + '>';
UsunP(Ciag, 1, Pos(Temp, Ciag) + SizeOf(Temp) + 3);
end
else
begin
for I := Start + 1 to Koniec - 1 do
Tag := Tag + Ciag[I];
Start := Pos('</' + Tag + '>', Ciag);
if Start <> 0 then
if Koniec <> 0 then
for I := Koniec + 1 to Start - 1 do
Wartosc := Wartosc + Ciag[I];
Temp := '</' + Tag + '>';
UsunP(Ciag, 1, Pos(Temp, Ciag) + SizeOf(Temp) + 3);
end;
WriteLn('tag: ', Tag);
WriteLn('wartosc: ', Wartosc);
DodajPotomka(Drzewo, Tag, Wartosc);
end;
Wartosc := '';
Tag := '';
until Pos('<', Ciag) = 0;
Co do czego służy - tag to string, który przechowuje treść tagu, a wartosc - wartość tagu.
Procedura DodajPotomka - do drzewa dodaje "potomka". Jest też druga procedura, która dodaje "rodzeństwo", ale nie zastosowałem jej jeszcze tutaj.
ciag - to string, który przechowuje aktualną linijkę.
Procedura UsunP natomiast usuwa z ciągu określoną ilość znaków. Drugi parametr określa od którego znaku ma usuwać, a trzeci - ilość znaków do usunięcia.
Chcę jakoś rozwiązać problem zagnieżdżonych tagów.
ciag
w konwencjivar
?