kage20 Napisano Luty 23, 2009 Zgłoś Share Napisano Luty 23, 2009 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 More sharing options...
Toster Napisano Luty 23, 2009 Zgłoś Share Napisano Luty 23, 2009 Hmm... a czy przez przypadek nie uzywasz wlasnie parsera XML ? jest on na bazie w Delphi. Nie czaje o co ci chodzi z uniwersalnym parserem Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kage20 Napisano Luty 23, 2009 Autor Zgłoś Share Napisano Luty 23, 2009 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 More sharing options...
Cubixmeister Napisano Luty 23, 2009 Zgłoś Share Napisano Luty 23, 2009 I tak ma być, nic nie robi się samo... Spróbuj zatrudnić sieci neuronowe ;D Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Luty 23, 2009 Zgłoś Share Napisano Luty 23, 2009 Zdajesz sobie sprawe ze XML jest app-dependent co czyni twoje starania calkowicie bezuzyteczne dla calego swiata ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kage20 Napisano Luty 23, 2009 Autor Zgłoś Share Napisano Luty 23, 2009 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 More sharing options...
Toster Napisano Luty 24, 2009 Zgłoś Share Napisano Luty 24, 2009 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 /> Link do komentarza Udostępnij na innych stronach More sharing options...
kage20 Napisano Luty 24, 2009 Autor Zgłoś Share Napisano Luty 24, 2009 właśnie o coś takiego wielkie dzięki Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.