AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML: TXMLDocument > schreiben/speichern
Thema durchsuchen
Ansicht
Themen-Optionen

XML: TXMLDocument > schreiben/speichern

Ein Thema von zecke · begonnen am 17. Mai 2007 · letzter Beitrag vom 19. Mai 2007
Antwort Antwort
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#1

XML: TXMLDocument > schreiben/speichern

  Alt 17. Mai 2007, 15:19


Also, ich habe folgende XML-Datei:

Delphi-Quellcode:
<all_men>
 <spieler_001>
  <main_daten>
   <vorname>Rafael</vorname>
   <nachname>Nadal</nachname>
   <alter>20</alter>
   <geburtstag>03.06.1986</geburtstag>
   <land>ESP</land>
   <groesse>185</groesse>
   <gewicht>85</gewicht>
   <profi>2001</profi>
   <spielhand>links</spielhand>
   <rueckhand>beidhändig</rueckhand>
   <belag>Sand</belag>
   <rang>2</rang>
   <rang2007>2</rang2007>
   <stil>Schneller Läufer mit sehr starker Vorhand</stil>
  </main_daten>
  <faehigkeiten>
   <schlagen>
    <vorhand>
     <kraft>94</kraft>
     <winkel>92</winkel>
     <kontrolle>94</kontrolle>
    </vorhand>
    <rueckhand>
     <kraft>85</kraft>
     <winkel>86</winkel>
     <kontrolle>89</kontrolle>
    </rueckhand>
   </schlagen>
  </faehigkeiten>
 </spieler_001>
</all_men>
Einen Eintrag laden ging ganz simpel mit einer zeile, das muss doch irgendwie mit dem Schreiben ähnlich sein

Jetzt möchte ich einen neuen Eintrag "<all_men><spieler_002>" schreiben. Wie mache ich das?

Danke im voraus
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: XML: TXMLDocument > schreiben/speichern

  Alt 17. Mai 2007, 16:36
Also deine vorgeschlagene Struktur halte ich für nicht konform:
XML-Code:
<all_men>
  <spieler_001>
  </spieler_001>
  <spieler_002>
  </spieler_002>
</all_men>
lieber
XML-Code:
<all_men>
  <spieler id="1">
  </spieler>
  <spieler id="2">
  </spieler>
</all_men>
Wie lädst Du denn. Nutzt du TXMLDocument ?
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: XML: TXMLDocument > schreiben/speichern

  Alt 17. Mai 2007, 16:45


Zuerst hatte ich es genauso wie in deinem Vorschlag, aber damit kam ich nicht ganz klar .

Ich lade in einer Funktion so:
vname:=(Form1.XMLDocument1.DocumentElement.ChildNodes[spieler].ChildNodes['main_daten'].ChildNodes['vorname'].Text); Spieler habe ich jetzt quasi als Variable drin, weil ich nicht mit den Attributen hantieren konnte (1. mal bisschen XML probieren).
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: XML: TXMLDocument > schreiben/speichern

  Alt 18. Mai 2007, 18:14
push

@Jelly: Evtl eine Idee?

ps: das mit den Attributen hab ich mir noch mal angeschaut... Vielleicht mache ich es dann doch so, aber ich sehe da nicht wirklich einen großen Unterschied

Meine Schwierigkeiten bleiben also bestehen
mfg zecke
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: XML: TXMLDocument > schreiben/speichern

  Alt 18. Mai 2007, 18:19
Zitat von zecke:
ps: das mit den Attributen hab ich mir noch mal angeschaut... Vielleicht mache ich es dann doch so, aber ich sehe da nicht wirklich einen großen Unterschied
Wenn du nur zwei oder drei Spieler hast (sagen wir: weniger als zehn ), dann ist der Unterschied wohl wirklich nicht groß. Allerdings wird das Handling umständlich, denn weil jeder Spieler seinen eigenen Knoten hat, musst du die Suchroutine auch für jeden Spieler separat schreiben (oder zumindest auslagern, so dass es per Parameter=Knotenname aufrufbar ist).

Nutzt du dagegen den gleichen Knoten mit unterschiedlichen "id"-Attributen, dann kriegst du mit einem guten XML-Parser per "selectNodes" alle Spieler sofort in ein Array (mal angenommen, du verwendest DOM). Und per "id"-Attribut kannst du sogar auf die Schnelle einen bestimmten Spieler bearbeiten.

Ich finde das effizienter.
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: XML: TXMLDocument > schreiben/speichern

  Alt 18. Mai 2007, 21:15


Leuchtet mir schon ein. So wie ich es oben gelöst habe, kommt es doch aufs gleiche raus. Ich gebe halt '001' weiter und setze das an 'spieler_' um den korrekten knoten zu haben. Wenn ich das mit Attributen habe, dann suche nach dem Knoten mit dem Attribut 001. Ich gebe so oder so nur 001 weiter. Das Suchen habe ich ja in einer unabhängigen Funktion, die als Parameter das Stück enthält, welches an 'spieler_' drangesetzt werden muss.
Evtl habe ich den Vorteil noch nicht ganz verstanden könnte daran leigen, dass ich mich mit XML nicht auskenne

Kennst Du (M.Simmack) vielleicht eine einfache Methode zum schreiben? Ich kann mir nicht vorstellen, dass es wesentlich komplizierter ist, als das Laden (s.o.). Habe wieder herumprobiert, aber es will nicht, wie ich will

Zu XMLDocument habe ich bisher auch nichts (brauchbares/Anfänger-geeignetes und ohne weiteren Schnick-Schnack installieren zu müssen) gefunden.

edit: evtl hilft mir noch dieser thread, werde ich nachher mal nachschauen.
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: XML: TXMLDocument > schreiben/speichern

  Alt 19. Mai 2007, 00:37
Ich habe meinen Fehler. Man muss die Änderungen noch extra abspeichern. Es wird Nichts gespeichert, wenn man AddChild etc benutzt. Erst ein SaveToFile schreibt es wirklich in die Datei. Auch wenn es bisher nirgends erwähnt wurde, auch nicht in der DP-Hilfe zu TXMLDocument, hätte ich das mal früher probieren sollen...

Ich wusste doch, es muss einfach sein
mfg zecke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz