AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parsen mit TXMLDocument

Ein Thema von rd3 · begonnen am 30. Dez 2008 · letzter Beitrag vom 11. Jan 2009
 
Benutzerbild von meolus
meolus

Registriert seit: 28. Aug 2005
Ort: Aachen
20 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Parsen mit TXMLDocument

  Alt 5. Jan 2009, 14:14
Ich benutze für XML-Dateien bisher diese (sehr) einfache Komponente: http://www.torry.net/authorsmore.php?id=4366

Das durchaus etwas sinnfreie Beispiel zum Erstellen und Laden von XML-Dateien habe ich mal so runtergeschrieben, es könnte also noch der ein oder andere Fehler drin sein, dass es nicht kompiliert!
Delphi-Quellcode:
var
  XMLDoc: TgmXML;


  //Write XML
  XMLDoc := TgmXML.Create(self);
  XMLDoc.Nodes.Clear;
  XMLDoc.Nodes.AddOpenTag('list');

  XMLDoc.Nodes.AddOpenTag('item');
  XMLDoc.Nodes.AddLeaf('name').AsString := 'Maier';
  XMLDoc.Nodes.AddLeaf('plz').AsInteger := 12345;
  XMLDoc.Nodes.AddLeaf('ort').AsString := 'Musterhausen';
  XMLDoc.Nodes.AddCloseTag;

  XMLDoc.Nodes.AddOpenTag('item');
  XMLDoc.Nodes.AddLeaf('name').AsString := 'Müller';
  XMLDoc.Nodes.AddLeaf('plz').AsInteger := 2345;
  XMLDoc.Nodes.AddLeaf('ort').AsString := 'Entenbach';
  XMLDoc.Nodes.AddCloseTag;

  XMLDoc.Nodes.AddCloseTag;
  XMLDoc.SaveToFile('file.xml');
  XMLDoc.Free;
  //END of Write XML



  //Read XML
  var
    MyString: string;
    i: Integer;

  XMLDoc := TgmXML.Create(self);
  XMLDoc.Nodes.Clear;
  XMLDoc.LoadFromFile('file.xml');
  if XMLDoc.Nodes.NodeByName['list'] <> nil then begin
    for i := 0 to XMLDoc.Nodes.NodeByName['list'].Children.Count-1 do begin
      with XMLDoc.Nodes.NodeByName['list'].Children.Node[i] do begin
        if Children.NodeByName['name'] <> nil
        then MyString := Children.NodeByName['name'].AsString;
        if Children.NodeByName['plz'] <> nil
        then MyString := Children.NodeByName['plz'].AsInteger;
        if Children.NodeByName['ort'] <> nil
        then MyString := Children.NodeByName['ort'].AsString;
      end;
    end;
  end;
  XMLDoc.Free;
  //END of Read XML

Inhalt der Datei 'file.xml' wäre dann:
Code:
<?xml version="1.0"?>
<list>
  <item>
    <name>Maier</name>
    <plz>12345</plz>
    <ort>Musterhausen</ort>
  </item>
  <item>
    <name>Müller</name>
    <plz>2345</plz>
    <ort>Entenbach</ort>
  </item>
</list>
Ein bischen problematisch bei dieser Klasse ist das Codieren der Sonderzeichen in ihre HTML-Entsprechungen. Bin nicht mehr ganz sicher, wie das im Original war, da ich die Klasse immer entsprechend angepasst benutzt habe, aber ich meine mit der Kodierung hatte ich Probleme, weil da " in &quot; umgewandelt wurde (korrekt) aber dann nachträglich noch dieses &quot; in &amp;quot; umgewandelt wurde, was einfach nur falsch ist, aber auch von der Klasse selber nicht mehr korrekt geladen werden kann, da die Reihenfolge der Codierung beim Laden nicht zu der beim Speichern passt.

Daher die dringende Empfehlung, die AsString-Getter und -Setter in der Klasse überarbeiten, also alles raus bis auf nötige Codierung für < und >
oder halt das Codieren vervollständigen und vorallem in entsprechender Reihenfolge, dass sich da nicht solche Abhängigkeiten ergeben
Real programmers don't comment their code;
if it was hard to write, it should be hard to read.
  Mit Zitat antworten Zitat
 


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 12:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz