German XML Libary

wbauer

Member
Licensed User
Longtime User
Hallo Leute

ich bin auf der Suche nach einer XML Libary. Möchte Daten in einer XML Struktur speichern und diese dann beim Programmende in ein File schreiben. Beim nächsten Programmstart werden die Daten dann wieder eingelesen.

Könnte zwar auch eine Datenbank verwenden, aber mit XML ist es mir lieber.

Kennt wer eine Library?

Grüße
Wolfgang
 

klaus

Expert
Licensed User
Longtime User

wbauer

Member
Licensed User
Longtime User
Danke Klaus für die schnelle Reaktion. Werde mir die Library zu Gemüte führen und dann mal posten, ob sie brauchbar ist.

LG aus Österreich
Wolfgang
 

wbauer

Member
Licensed User
Longtime User
Habe mir die XML library angesehen und auch gleich bei mir verwendet. Ist ganz gut, um Datenstrukturen beim Beenden des Programmes abzuspeichern und beim Starten strukturiert neu einzulesen.

Ist aber nicht geeignet, um in dem XML File zu navigieren. Z.B. für meine Applikation (Portfoliomanager) möchte ich den User (beliebig viele) Seiten (einzelne Portfolios) anlegen lassen, in denen immer die gleiche Datenstruktur (bis zu 5 Aktien) gespeichert ist. Mittels zweier Buttons (Vor/Zurück) kann dann immer das nächste Portfolio mit den darin gespeicherten Aktien aufgerufen werden.

Da wäre es schon praktisch, wenn man zwischen den einzelnen Elementen im XML "wandern" könnte. Ich suche mir das aktuelle Portfolio im XML File und mittels des Befehls GetPrevSibling bekomme ich dann das vorherige Portfolio. Mittels GetNextSibling das nächste... Oder mittels GetFirstChild bekomme ich die erste Aktie des aktuellen Portfolio ... Oder mittels GetParent bekomme ich zu aktuellen Aktie das entsprechende Portfolio ...

Alles praktische Funktionen, die das Navigieren erleichtern würden.

Habe schon im entsprechenden Thread eine Wunschliste an Erweiterungen hinterlassen. Abwarten, ob die Library weiterentwickelt wird.

LG
Wolfgang
 

wbauer

Member
Licensed User
Longtime User
Hi Klaus.

Das letzte Programm (Vokabeltrainer -> schließlich will ich im Frankreichurlaub heuer mein Bier auf Französisch bestellen) habe ich mit einer SQLLite Datenbank programmiert. War für die Menge an Daten besser als mit einem XML File.

Für kleine Datenmengen bevorzuge ich XML Files, weil ich dann den ganzen "Administrationsballast" einer Datenbank nicht benötige. Mit den oben beschriebenen Funktionen könnte man superschnell in den Daten navigieren. Ausserdem kann ich während der Entwicklungsphase leicht die Daten im XML File mittels eines XML Editors korrigieren, was sich oft als recht praktisch herausstellt.

Und ausserdem wollte ich mal was Neues probieren, nachdem ich beim letzten Projekt schon eine Datenbank verwendet habe.

LG
Wolfgang
 

klaus

Expert
Licensed User
Longtime User

wbauer

Member
Licensed User
Longtime User
Hi Klaus.

Vokabelprogramm ist noch nicht fertig durchgetestet. Da muss ich noch ein bißchen schrauben.

Aber von meinem Portfoliomanager kann ich mal ein erste Version veröffentlichen. Bin gerade so weit fertig geworden, dass ich mal auch andere drüber schauen lassen kann.

Ziel des Programms:
Kurse zu Aktien online abfragen und Gewinn/Verlust berechnen (derzeit leider eher Verlust ;-)

Hauptseite-Portfolio

Die Hauptseite teilt sich in 3 Bereiche auf:

1. Header mit dem Namen des Portfolios (schwarz):
besteht aus Zurück(<) Portfolioname Weiter (>)
derzeit wird nur eine Portfolioseite unterstützt. Zukünftig sollen beliebig viele Portfolios verwaltet werden können. (aber erst in der nächsten Version ;-)

2. Aktienbereich
Es sind 5 mögliche Positionen für Aktien als unterschiedliche Zeilen (dunkel/hellgrau) vorhanden. Jede Aktienzeile ist wieder unterteilt in 3 Zeilen mit folgendem Aufbau:

Detailinfos eine Aktienzeile:
1. Zeile: Wertpapiersymbol, Letzter Wert, Veränderung absolut und in Prozent zum Vortag
2. Zeile: Name des Wertpapiers, Datum und Zeit des letzten Werts
3. Zeile: Anzahl der gekauften Stück, Gesamtbetrag Kaufwert, Gesamtbetrag Aktuell, Gewinn/Verlust absolut und in Prozent

3. Footer mit den Summen über alle 5 Aktien zu Kaufwert, AktuellerWert, Gewinn/Verlust absolut und in Prozent (wieder schwarz)


Menü Portfolio

Über das Menü können weitere Fenster aufgerufen werden bzw. die gesamte Aktienliste aktualisiert werden.

  • Menü Stock - Refresh all: für alle Aktienzeilen die neuen Daten abrufen
  • Menü Preferences: Timeout der HTML Verbindung ändern
  • Menü Quit: Beendet das Programm

Im aktuellen Source habe ich alle 5 Aktienzeilen bereits mit Werten befüllt.

Mit dem Menü "Refresh all" (siehe oben) werden alle Aktienzeilen neu geladen. Dazu wird das Webservice StockQuote von WebserviceX.net aufgerufen. Als Parameter wird das Wertpapiersymbol der aktuellen Aktie mit übergeben (weiter Infos zu dem Webservice ganz am Ende). Die gelieferten Detaildaten des Webservice wird dann in die anderen Felder der Aktie übernommen und die berechneten Felder (wie Kaufwert, Aktueller Wert, Gewinn/Verlust,...) neu berechnet. Ganz links wird in den Aktienzeilen angezeigt, welche Aktie gerade abgefragt wird (Blauer Balken). Wenn Daten aktualisiert wurden, verändert sich der Balken wieder auf Grau. Wenn keine Verbindung aufgebaut werden konnte, dann wird dies durch einen gelben Balken dargestellt.

Jede Aktienzeile hat auch ein Context-Menü mit 2 Menüeinträgen
  • Context-Menü Refresh stock: Aktualisiert nur die Daten der aktuellen Aktie
  • Context-Menü Edit: Öffnet das Aktien-Detailfenster. Dort kann dann das Wertpapiersymbol geändert werden und die Anzahl und der Kurs von gekauften Aktien eingetragen werden

Seite Preferences

Über das Menü "Portfolio - Preferences" wird das Fenster Preferences aufgerufen. Dort kann man allgemeine Einstellungen zum Programm vornehmen. Derzeit kann das Timeout (in Sekunden) für die HTML Verbindung eingestellt werden. Das kann helfen, wenn wieder mal eine langsames Webservice aufgerufen wird. Einfach mit den Sekunden experimentieren (Standard ist 20 Sekunden).

Als Webservice zur Abfrage der Aktiendaten verwende ich derzeit StockQuote von WebserviceX.net, weil dieses Service die Daten zu einer Aktie in einem XML Stream anliefert. Leider scheint dieses Service sehr überlastet zu sein, sodass es zu sehr langen Abfragezeiten kommt.

Da werde ich in Zukunft noch einen Parser schreiben, mit dem man die entsprechenden Daten aus einer normalen HTML Seite (z.B. über finance.yahoo.com oder jede andere Finanzseite) herauspicken kann. Das ist aber etwas schwieriger als den reinen XML Stream zu verarbeiten.


Datenspeicherung

Die Datenspeicherung wird in einer XML Daten vorgenommen, die im AppPath gespeichert wird.

Beim Schließen des Hauptfensters werden alle Portfolioseiten (derzeit halt nur eine) und die darin enthaltenen Aktien, sowie die Preference-Einstellungen in die XML Datei geschrieben.

Beim Start werden die Daten wieder aus der XML Datei gelesen.


Notwendige Libraries

  • HTTP.dll
  • ControlsEx.dll
  • FormLib.dll
  • XML.dll
-----------

In einer nächsten Version werde ich dann folgende Funktionen noch einbauen:
  • Anlegen/Verwalten mehrere Portfolioseiten
  • Blättern zwischen den Protfolioseiten
  • zeitgesteuerte automatische Abfrage der Daten
  • Parser für andere HTML Datenquellen (normale Finanzseiten)

Anmerkung: durch die 5 Zeilen mit Aktien habe ich leider sehr viel Code-Verdoppelung erhalten, weil ich die Berechnungen immer für alle Aktien extra durchführen muss. Habe zwar versucht, so viel wie möglich in Funktionen zu kapseln, aber trotzdem viel redundanter Code vorhanden.

Wer hier Verbesserungvorschläge hat, ist gerne aufgerufen zu posten!

By the way - Version ist noch nicht vollständig durchgetestet. Kommentare im Source Code sind grossteils auf englisch (oder was ich darunter verstehe ;-)

Was sonst noch? Ja - das Webservice ist WIRKLICH total überlastet. Geht meistens nur in der Früh und am späten Abend halbwegs verlässlich.

LG
Wolfgang
 

Attachments

  • MyPortfolio.zip
    23.9 KB · Views: 257
Last edited:

klaus

Expert
Licensed User
Longtime User
Hallo Wolfgang.

Beiliegend findest Du 2 Programme mit gekürztem Sourcecode.
- MyPortfolio0_21 mit neuem und altem Code zum Vergleich
- MyPortfolio0_22 nur mit neuem Code

Das Programm hat sich von 1023 zu 497 Codelinien verkürtzt.

Ich habe wo immer es ging, zum Beispiel
lbDate1.Text
lbDate2.Text
.
.
lbDate5.Text

durch
Control("lbDate"&row,Label).Text

ersetzt.

Habe auch einige Controlnamen geändert damit sie mit dem fieldName gleich sind, als Beispiel.
lbDatum1 > lbDate1
lbWL1 > lbWinLoss1

In der CalculateTotals Routine fehlt eine Rechnung für lbWinLossPercTotal ?

Die Textgrösse finde Ich, für meine schlechten Augen, etwas zu klein.

Beste Grüsse.
 

Attachments

  • MyPortfolio0_22.sbp
    25.7 KB · Views: 235

wbauer

Member
Licensed User
Longtime User
Hi Klaus.

WOW - Danke für das Überarbeiten des Source Codes.

Da ich mich mit B4PPC erst seit einer Woche spiele, habe ich den Trick mit Control (....) zum Referenzieren auf Objekte nicht gekannt. Das ist eine tolle Erleichterung - nie mehr Code-Verdoppelung!!!!!

Das mit den Namensangleichungen wäre auch bei mir einer der nächsten Schritte gewesen ... am Anfang testet man nur ein paar Sachen und macht sich keine großen Gedanken über die Nomenklatur der Bezeichnungen und irgendwann ist man dann mitten in einem Projekt und schleppt die Altlasten mit ;-)

Zur Schriftgröße: gebe dir recht, das ist schon was für gute Augen. Wollte aber unbedingt 5 Aktien pro Seite darstellen, das geht dann halt auf einem beschränkten Display eines PPC nur mit kleinen Schriften. Habe einen HTC Touch Pro mit VGA Auflösung, da kann man die Zahlen halbwegs gut lesen. Vielleicht lasse ich mir mal was einfallen, um das noch zu verbessern

Nochmals herzlichen Dank, dass du den Code verbessert hast!!!!

LG
Wolfgang
 

wbauer

Member
Licensed User
Longtime User
Hi Filippo

Danke für den Link, werde mir das mal anschauen. Aber auf den ersten Blick ist mir der Umfang der Börsen und Kurse etwas zu eingeschränkt. z.B Habe ich Wahnsinniger mal "Mandalay Resources" gekauft (frage mich nicht warum!) - die werden über das Service nicht gelistet.

Aber auf jeden Fall mal eine Analyse wert.

LG
Wolfgang
 
Top