Skocz do zawartości

[Delphi .Net] Prosty XML Parser


kage20

Polecane posty

Pisze własnego parsera do odczytywania XML. Mam przykładowy taki plik(skrócony):

KOD<?xml version="1.0"?>

<catalog>

<book id="bk101">

<author>Gambardella, Matthew</author>

<title>XML Developer's Guide</title>

<genre>Computer</genre>

<price>44.95</price>

<publish_date>2000-10-01</publish_date>

<description>An in-depth look at creating applications

with XML.</description>

</book>

<book id="bk102">

<author>Ralls, Kim</author>

<title>Midnight Rain</title>

<genre>Fantasy</genre>

<price>5.95</price>

<publish_date>2000-12-16</publish_date>

<description>A former architect battles corporate zombies,

an evil sorceress, and her own childhood to become queen

of the world.</description>

</book>

</catalog>

książek jest z 10 ale to nie ważne napisałem taką funkcje czytającą wartości(w skrócie):

 if doc.HasChildNodes then
   for i:=0 to doc.ChildNodes.Count-1 do
   begin
     node := doc.ChildNodes.ItemOf[i];
     if node.HasChildNodes then
       for j:=0 to node.ChildNodes.Count-1 do
       begin
         next := node.ChildNodes.ItemOf[j];
         if next.HasChildNodes then
           for k:=0 to next.ChildNodes.Count-1 do
           begin
             next1 := next.ChildNodes.ItemOf[k];
             if next1.HasChildNodes then
               for l:=0 to next1.ChildNodes.Count-1 do
               begin
                 last := next1.ChildNodes.ItemOf[l];
                 if not last.HasChildNodes then ShowMessage(last.InnerText);
               end;
           end;
       end;
   end;

działa dobrze ale nie zadziała na pliku xml z inną strukturą danych a chce napisać uniwersalny parser dla plików xml, wie ktoś czy da się ten kod przerobić na funkcje rekurencyjną(próbowałem ale mam za mało doświadczenia w pisaniu takich funkcji) czy pod tym względem jest to złe rozwiązanie i da się czytać rekurencyjnie XML tylko z XPath? Widać że pewne elementy się powtarzją w kółko ale nie wiem wole zapytać na wszelki wypadek zanim będe od nowa pisał kod do czytania XMLa za pomocą XPath.

z góry thx

Link do komentarza
Udostępnij na innych stronach

uzywam komponentu z .net XmlDocument, chodzi mi o to że jak mój plik XML będzie bardziej złóżony np przy author będzie miał jeszcze dodatkowe metatagi np

KOD<author>

<firstname>Imię</firstname>

<secoundname>Nazwisko</secoundname>

</author> i dopiero wartości to będe musiał dopisywać kolejną pętelke żeby to odczytać i wstawic do TreeView, a gdyby napisał funkcje rekurencyjna to by nie było problemu z żadnym XMLem (niezależnie jak bardzo jest rozbudowany)

Link do komentarza
Udostępnij na innych stronach

ja rozumiem że jak robie program oparty na XMLach to sam tworze strukture swoich plików XML i pisze konkretną funkcje odczytująca ta strukture ale gdy tworze poprostu program np tylko do wyświetlania pliku XML lub ewentualnie edytor (zmieniam wartość w treeview i zapisuje zmiany z TreeV do pliku XML ponownie), wydaje mi sie że poprostu musi być możliwość napisania czegoś takiego, no ale nic z XPathem powinno działać na zasadzie podobnej jak się przeszukuje dysk ^^

Link do komentarza
Udostępnij na innych stronach

Chodzi ci o takie cos ? jako wejscie podejesz dowolnego noda (najlepiej roota) i powinien ci wylistowac wszystkie nazwy nodow ukladajac zaglebieniami.

 

procedure PrintXML(const node:IXMLNode; const indent: string);
var
t: integer;
begin
  memo1.lines.add(indent + node.NodeName);
  for t := 0 to node.childNodes.count-1 do
     PrintXML(node.childNodes[t], indent + ' ');
end;

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...