Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi XML mit TJvSimpleXml (https://www.delphipraxis.net/52029-xml-mit-tjvsimplexml.html)

noeon112 21. Mär 2006 18:13

Re: XML mit TJvSimpleXml
 
Hallo,

also ich versuch es einmal,

Code:
XML_Dock.Root.Name :='Config1';
  with XML_Dock.Root.Items.add('Configtest') do
    Begin
      Items.Add('WERT1',edit1.text);
      Items.Add('cmb_Auswahl',combobox1.ItemIndex);
    end;
      XML_Dock.SaveToFile('Configuration.xml');
Mit dem oben gepostetem Code schreib ich die XML Datei.


Code:
 XML_Dock.LoadFromFile('Configuration.xml');
    xml_Dock.Root.Name := ('config1');
    Edit1.Text := xml_dock.Root.Items.item('Wert1');
    ComboBox1.ItemIndex := xml_Dock.Root.Items.Item('cmb_Auswahl');
Mit dem Code möchte ich die Datei wieder auslesen und zurückschreiben in die entsprechenden Steuerelemente.

Kannst Du helfen?!


Gruss
Lars

yankee 21. Mär 2006 23:57

Re: XML mit TJvSimpleXml
 
Zitat:

Zitat von noeon112
Code:
 XML_Dock.LoadFromFile('Configuration.xml');
    xml_Dock.Root.Name := ('config1');
    Edit1.Text := xml_dock.Root.Items.item('Wert1');
    ComboBox1.ItemIndex := xml_Dock.Root.Items.Item('cmb_Auswahl');

Ja, da lies doch nochmal genauer:
xml_Dock.Root.Name := ('config1'); <-- diese Zeile kannst du dir komplett sparen. Das musst du nur beim Speichern der Datei machen, wenn die vorher nicht existierte. Wieso hast du da eigentlich Klammern um den String?

Edit1.Text := xml_dock.Root.Items.item('Wert1'); <-- Werf mal einen Blick auf die CodeCompletion von Delphi. Diese Funktion erwartet als Parameter einen integer und keinen String. Nebenbei erhaelst du so nur das Element und nicht was in dem Element drin steht. Richtig ist:
Edit1.Text := xml_dock.Root.Items.itemNamed['Wert1'].Value;
Bei der naechsten Zeile genau das selber, nur dass es sich bei Combobox1.itemindex um eine Zahl handelt. Daher nimmst du nicht Value sondern IntValue:
ComboBox1.ItemIndex := xml_Dock.Root.Items.ItemNamed['cmb_Auswahl'].IntValue;

und schon sollte es klappen :-)

noeon112 22. Mär 2006 10:57

Re: XML mit TJvSimpleXml
 
HI,


Also angeschaut ja,
mir war der aufbau nicht ganz klar aber nun klickerte es.

Allerdings gibt es jetzt eine nette kleine Exception

zugriffsverletzung am Modul Projekt1.exe
Die Datei ist allerdings geschlossen...


Hast Du noch einen Tipp wie ich das händeln kann!?
Code:
Edit1.Text := xml_dock.Root.Items.itemNamed['Wert1'].Value;
in dieser zeile springt er raus und macht sie blau...


Gruss
lars

und zur Vollständigkeit halber einmal die XML Datei

XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<Config1>
  <Configtest>
    <WERT1>Testwert</WERT1>
    <cmb_Auswahl>2</cmb_Auswahl>
  </Configtest>
</Config1>

yankee 22. Mär 2006 14:00

Re: XML mit TJvSimpleXml
 
Zitat:

Zitat von noeon112
Code:
Edit1.Text := xml_dock.Root.Items.itemNamed['Wert1'].Value;
in dieser zeile springt er raus und macht sie blau...

Ja, das passt immernoch nicht so ganz zu deiner xml-Datei
<?xml version="1.0" encoding="iso-8859-1"?>
<Config1> --root-Element
<Configtest> --Unterelement des rootelements mit dem Name configtest
<WERT1>Testwert</WERT1> --unterelement des Configtestelements mit dem Name WERT1
<cmb_Auswahl>2</cmb_Auswahl>
</Configtest>
</Config1>

Das Unterelement des rootelements mit dem Name configtest leasst du komplett weg.
Richtig:
Delphi-Quellcode:
Edit1.Text := xml_dock.Root.Items.itemNamed['Configtest'].items.itemNamed['Wert1'].Value;
Wenn das immernochnicht funzt, dann solltest du mal versuchen die gross- und kleinschreibung abgleichen. Also entweder beim speichern und beim Laden gross schreiben oder beides klein...

noeon112 30. Mär 2006 10:37

Re: XML mit TJvSimpleXml
 
Hallo,

So nun mal Sinning,

Ich hab ein kleines Problem selber gelöst,
die XML Datei die ich mir erzeugt habe von unten nach oben auszulesen. *froi*

Jetzt will ich bestimmte Einträge suchen, also eine Art Indizierung darstellen.

Variante 1: StringList alle werte einlesen und mit Index Versehen.
variante 2: in einer Schleife die Werte der XML Datei durchlaufen lassen.

Es geht darum keine doppelten Werte vorkommen zu lassen.



Danch will ich auch noch entspreche Werte wieder löschen.

Ich bion ja mal gespannt. Ist ein echt spannendes Thema.


Wenn es ok ist stelle ich das Projekt mal rein und vielleicht kann man da ja auch was mitnehmen an Erfahrung.

Gruß
Lars

XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<Config1>
  <Configtest>
    <ProfilName>Profil 1</ProfilName>
    <WERT1>Hallo Versuch 1</WERT1>
    <cmb_Auswahl>2</cmb_Auswahl>
  </Configtest>
  <Configtest>
    <ProfilName>Profil 2</ProfilName>
    <WERT1>Hallo Versuch 2</WERT1>
    <cmb_Auswahl>3</cmb_Auswahl>
  </Configtest>
</Config1>

mav 12. Jun 2006 18:13

Re: XML mit TJvSimpleXml
 
hi all..

bin gerade an einem kleinen xml projekt.. und suchte nach guten möglichkeiten ein xml-file auszulesen. da sties ich auf dieses tut hier.
jetzt zu meinem problem:
Delphi meldet mir dass er aus "XmlDoc.Root.Count"

[Fehler] profiler_readout.pas(40): Undefinierter Bezeichner: 'Count'

kann mir dabei jemand helfen?

Jarmen_Kell 12. Jun 2006 18:46

Re: XML mit TJvSimpleXml
 
Das kann durchaus jemand^^

Nun, Es gibt nur einen root, daher hat root keine Eigenschaft "Count".
Root hat aber Items, die gezählt und ausgegeben werden können.
Demnach muss es also einfach nur .Root.Items.Count heißen!

alias5000 12. Jun 2006 19:14

Re: XML mit TJvSimpleXml
 
Erstmal ein großes dankeschön für das Tut. Sowas in der Art hab ich irgendwie schon immer gesucht. Allerdings bin ich der Meinung, dass mit dem TJvSimpleXML auch sowas
Code:
<resource_name value="VV4A"/>
möglich ist (*nachdenk*). Ich hab mit dem SImpleXML ja schonmal rumgespielt. Sollte ihc da was rausfinden, melde ich mich.

Ich hab aber eine andere Frage:
wie sieht das mit der Geschwindigkeit aus, wenn ich, sagen wir mal zu einer geladenen XML Datei so 3-4 Unterknoten einfüge (mit jeweils etwa einer Zeile Text als Inhalt) und das dann abspeichere. Ist da die JVCL Variante schnell, oder gibts da noch was besseres? Die Frage ist jetzt so eine Sache, weil ich das auch selbst testen könnte. Falls jemand so schon Ahnung hat, würde ich sie gerne hören, ansonsten werd ich selbst testen (müssen).

Gruß alias5000

Jarmen_Kell 13. Jun 2006 13:37

Re: XML mit TJvSimpleXml
 
Ich meine, hier mal irgendwo gelesen zu haben, dass die TJvSimpleXML keine Attribute behandeln kann. Dort wurde darauf verwiesen, dass es ja nur eine Simple-XML ist und man das daher nicht erwarten könne...
Aber interessant wäre das für mich durchaus auch einmal, wenn auch ich damit schon einiges tat und noch auf keine Möglichkeit stieß.

Bezüglich Zeitaufwand: Genaue Werte kann ich dir auch nicht geben, doch geht es wirklich raschefix^^
Ich habe eine Datei mit ~20 Unterknoten, die jeweils 7 Elemente enthalten.. Von der Speicherung merke ich dabei nichts und auch das einfügen (wenn auch sie einzeln eingefügt und vorher händisch eingegeben werden) geht ohne merklichen Verbrauch von statten.
Bei den 4 Einträgen sollte die Zeit also absolut irrelevant sein.

alias5000 13. Jun 2006 20:53

Re: XML mit TJvSimpleXml
 
Bloß, wenn ich schon, sagen wir mal 400 Knoten mit je den 4 Unterknoten hab, wie siehts dann aus
(Es geht um die gestaltung einer Historie in einem Chat, da muss das schnell von statten gehen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Seite 2 von 5     12 34     Letzte »    

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