![]() |
AW: Xml
so, bin jetzt glaub ich?! ein stück weiter:
Delphi-Quellcode:
jetzt bekomme ich aber die Meldung: CoInitialize wurde nicht aufgerufen.
uses
SysUtils, xmldoc; var a : TXmlDocument; begin try a := TXMLDocument.Create(nil); a.Active := True; a.LoadFromFile('C:\test.xml'); except on e : exception do begin writeln(e.message); a.Destroy; halt(1); end; end; end. habe gelesen das ich das for das am anfang und am ende setzen muss. jedoch sagt er mir immer undeclared identifier... Bin ich am richtigen weg oder am komplett falschen? :) LG |
AW: Xml
Nja, SimpleXML ist halt ein bissl "älter", obwohl ich jetzt nicht wüßte, warum es mit dieser Datei nicht klarkommen sollte.
Wobei die 1 für micht in Zeile 2 Zeichen 8 liegt. :gruebel: PS: ![]() Und dann ruft man Destroy eigentlich nicht direkt auf, sondern nutzt Free. |
AW: Xml
hm naja ich machs ja jetzt nicht mit SimpleXML sonder mit XMLDoc dh:
Delphi-Quellcode:
habe versucht das Coinitialize fast an jeder Stelle des codes zu platzieren, das will er aber niergends...
program test;
{$APPTYPE CONSOLE} uses SysUtils, xmldoc; var a : TXmlDocument; begin try a := TXMLDocument.Create(nil); a.Active := True; a.LoadFromFile('C:\test.xml'); except on e : exception do begin writeln(e.message); a.Free; halt(1); end; end; end. wo gehört das den hin? LG |
AW: Xml
Versuch es einmal im Initialization-Abschnitt. Und Du gibst a nur im Falle einer Exception frei, das soll ja bestimmt nicht so, oder?
|
AW: Xml
hm da liegt ja momentan mein problem, habe sowas bis dato noch nie benötigt und jetzt steh ich ziemlich an.
ausserdem war das dann ja noch nicht alles, schließlich will ich mir ja noch den wert 123 von param auslesen... :( kann mir jemand helfen?
Delphi-Quellcode:
program test;
{$APPTYPE CONSOLE} uses SysUtils, xmldoc, xmlintf; var a : TXmlDocument; begin try a := TXMLDocument.Create(nil); a.Active := True; a.LoadFromFile('C:\test.xml'); except on e : exception do begin writeln(e.message); halt(1); a.Free; end; end; a.Free; end. |
AW: Xml
so... ich glaube ich komme meiner sache näher... habe jetzt ActiveX hinzugefügt und siehe das funkt!
Delphi-Quellcode:
jetzt muss ich mir nur noch den Wert auslesen, hat da jemand ein Beispiel für mich?
program test;
{$APPTYPE CONSOLE} uses SysUtils, xmldoc, xmlintf, activex; var a : TXmlDocument; begin try CoInitialize(nil); a := TXMLDocument.Create(nil); a.Active := True; a.LoadFromFile('C:\test.xml'); except on e : exception do begin writeln(e.message); a.Free; halt(1); end; end; a.Free; CoUninitialize; end. |
AW: Xml
mit der XML Datei:
Code:
<config>
<virtualdrive1> <maxsize>700</maxsize> <validfrom>YYYY-mm-dd hh:mm:ss.999</validfrom> <validto>YYYY-mm-dd hh:mm:ss.999</validto> <example> <ex1>example</ex1> <ex2>example</ex2> </example> <share> <shareuser>user</shareuser> <sharepw>sharepw</sharepw> <sharepath>sharepath</sharepath> </share> </virtualdrive1> </config>
Delphi-Quellcode:
SysUtils,
ActiveX, XMLIntf, xmldoc; var myConfig: IXMLDocument; begin try CoInitialize(nil); myConfig := LoadXmlDocument('Config.xml'); WriteLn(myConfig.DocumentElement.ChildNodes.First.ChildNodes.First.Text); ReadLn; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; |
AW: Xml
das funktioniert! unglaublich! xD
ein Problem habe ich jedoch noch: wenn ich versuche den Shareuser auszulesen bekomme ich folgende Exception: Access violation at address 00416243 in module 'test.exe'. Read of address 00000000 Code ist wie folgt:
Delphi-Quellcode:
wobei filesize und shareuser ein string sind....
try
CoInitialize(nil); config := LoadXMLDocument('C:\test.xml'); filesize := config.DocumentElement.ChildNodes.First.ChildNodes.First.Text; shareuser := config.DocumentElement.ChildNodes.FindNode('shareuser').Text; except on e : exception do begin writeln(e.message); end; end; muss ich davor ein Release machen oder irgendwas in der art? |
AW: Xml
Wenn ich es richtig sehe, versuchst Du "shareuser" in der obersten Knotenebene der Hierarchie zu finden, wo es aber nur "virtualdrive" gibt. Das ist wahrscheinlich die Ursache für die Fehlermeldung.
Du müsstest erst in einer Knotenvariable z. B. "ANode: IXMLNode;" den Knoten speichern, unterhalb dessen Du suchen willst, und dann mit "ANode.FindNode('shareuser')" weitersuchen. Hier: ![]() Hier: ![]() Ich hoffe, dass Dir das weiterhelfen kann. |
AW: Xml
Hi
vielen dank, bin jetzt ein großes Stück weiter!! und zwar habe ich folgendes XML:
Code:
das auslesen der nodes wie validto, validfrom, maxsize usw ist kein problem allerdings habe ich ein problem bie den devs!
<config>
<virtualdrive1> <maxsize>700</maxsize> <validfrom>YYYY-mm-dd hh:mm:ss.999</validfrom> <validto>YYYY-mm-dd hh:mm:ss.999</validto> <devs> <dev1>example</dev1> <dev2>example</dev2> </devs> <share> <shareuser>user</shareuser> <sharepw>sharepw</sharepw> <sharepath>sharepath</sharepath> </share> </virtualdrive1> </config> Ich muss praktisch abfragen, wieviele devs gibt es und wie sind die Werte... habe es schon mit:
Delphi-Quellcode:
aber irgendwie komm ich nicht klar...
devs := config.DocumentElement.ChildNodes.First.ChildNodes.FindNode('devs').Text;
hat jemand einen tipp bzw. ein beispiel für mich? DANKE! LG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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 by Thomas Breitkreuz