![]() |
Re: himXML (gesprochen himix ML)
Ich versuche erfolglos folgende XML-Datei zu laden (nur der relevante Anfang:
XML-Code:
usw.
<?xml version="1.0" ?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2009-07-01"> <OperationRequest> <RequestId>147c6ffa-697d-4a9b-86e0-2c9216c2cd60</RequestId> <Arguments> <Argument Name="Operation" Value="ItemSearch" /> <Argument Name="Service" Value="AWSECommerceService" /> <Argument Name="Signature" Value="uXLTuuePbsbl977Rcz+6TNyq3ihx3J52+KN6jt4DlSA=" /> <Argument Name="ItemPage" Value="1" /> <Argument Name="AssociateTag" Value="bla" /> <Argument Name="Version" Value="2009-07-18" /> <Argument Name="Keywords" Value="Matrix" /> <Argument Name="AWSAccessKeyId" Value="KEY" /> <Argument Name="Timestamp" Value="2010-05-02T18:52:50Z" /> <Argument Name="ResponseGroup" Value="Large" /> <Argument Name="SearchIndex" Value="DVD" /> </Arguments> <RequestProcessingTime>0.1835730000000000</RequestProcessingTime> </OperationRequest> <Items> <Request> <IsValid>True</IsValid> <ItemSearchRequest> <Condition>New</Condition> <DeliveryMethod>Ship</DeliveryMethod> <ItemPage>1</ItemPage> <Keywords>Matrix</Keywords> <MerchantId>Amazon</MerchantId> <ResponseGroup>Large</ResponseGroup> <ReviewSort>-SubmissionDate</ReviewSort> <SearchIndex>DVD</SearchIndex> </ItemSearchRequest> </Request> <TotalResults>130</TotalResults> <TotalPages>13</TotalPages> <Item> <ASIN>B001G5HB2I</ASIN> <DetailPageURL>http://www.amazon.de/Matrix-Complete-Trilogy-Keanu-Reeves/dp/B001G5HB2I%3FSubscriptionId%3D1HDS51J6EDYSCKF0YJ82%26tag%3Dtastenhacker-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001G5HB2I</DetailPageURL> </Item> </Items> </ItemSearchResponse> Mein Code sieht so aus:
Delphi-Quellcode:
Ich bekomme aber für TotalResults und TotalPages immer eine 0. Wo liegt mein Problem?
procedure Parse(ResponseXML: string);
var XML: TXMLFile; I: integer; Movie: TMovie; PicURL: string; begin XML := TXMLFile.Create(); try ClearMovies(); XML.LoadFromXML(ResponseXML); with XML.Node['ItemSearchResponse'].Node['Items'] do begin Self.TotalResults := Node['TotalResults'].Text; Self.TotalPages := Node['TotalPages'].Text; for I := 0 to Nodes.Count - 1 do begin if Nodes[i].Name = 'Item' then begin // Mach was mit Item end; end; end; finally XML.Free; end; end; |
Re: himXML (gesprochen himix ML)
XML.Node['...'] entspricht with XML.RootNode.Node['...'] do
versucht mal statt
Delphi-Quellcode:
einfach nur
with XML.Node['ItemSearchResponse'].Node['Items'] do
Delphi-Quellcode:
with XML.Node['Items'] do
PS: Zum Test kannst du auch mal das standardmäßig gesetzte xoNodeAutoCreate aus den Options entfernen, dann sollte es eine Exception geben, weil ja auf einen nicht existierenden Node zugegriffen wird. |
Re: himXML (gesprochen himix ML)
hey himitsu, bin nun nach langem hin und her (vor allem wegen Threadsicherheit) von der MSXML auf deine Klasse umgestiegen.
Da ist mir doch gleich ein Fehler aufgefallen (v0.99d Beta 12.01.2010). Wenn ich den Wert einen Checkbox oder allgemeiner einen Boolean-Wert abspeichere, erwarte ich, dass True/False geschrieben wird. Deine Klasse schreibt bei Wahr jedoch $FFFF. Hab den Fehler mittels BoolToStr erstmal umgehen können. Ansonsten Top Arbeit :thumb: Beispiel:
Delphi-Quellcode:
<TXMLFile>.Nodes['xml'].Nodes['testwert'].Text := True;
|
Re: himXML (gesprochen himix ML)
Threadsicher ist meine Klasse aber auch nicht ... jedenfalls sollte man nicht von mehreren Threads aus den selben Node, bzw. die selbe NodeListe bearbeiten/ändern.
(diesbezüglich wird sich aber in der nächsten Version sehr viel ändern, vorallem da ich jetzt endlich eine gute Möglichkeit für die Nutzung von Interfaces gefunden hab ... hatte ja enorme Probleme mit Kreuzreferenzen und dudurch selbsthaltenden Datenstrukturen :? ) In der nächsten Version und wenn ich meine RexEx-Klasse (ePCRE) fertig hab, wird es wohl auch endlich XPath geben. Hhhhh, das nut den Boolean muß ich wohl nochmal nachsehn, der Grund hiefrür ist erstmal, daß in einem Variant nicht das 1-Byte-kleine Boolean, sondern das 2-Byte WordBool Verwendung findet. Boolean: True = 1 WordBool: True = -1 aka $FFFF Aber eigentlich dachte ich, ich hätte dieses entsprechend beachtet. :shock: Intern ist jedenfalls eine eigene Version von BoolToStr verbaut. Denn der Hauptgrund für den Nummerischen Wert ist, daß ich keine SubWerte vernichten wollte und es somit auch einen nummerischen Modus gibt, neben den TRUE- und FALSE-Ausdrücken für -1 und 0. > Ein Boolean, ByteBool, WordBool oder LongBool kennt nunmal nicht nur True und False, sondern noch viel mehr. PS: Das ist auch der Grund, warum man bei Abfragen nicht mit =True vergleichen darf. :zwinker: Aber wir gesagt, eigentlich sollte bei diesem $FFFF in der Datei TRUE drinstehn ... ich werd' es mir also nochmal ansehn. |
AW: himXML (gesprochen himix ML)
Hallo himitsu,
erstmal vielen Dank für Deine erstklassige Arbeit! Mir gefällt die himXML sehr gut! Zu meiner Frage: Ich möchte GUI-Komponenten als XML speichern und wieder laden. Also aus der XML wieder eine GUI erstellen. Das wollte ich mit TXMLNode.Serialize() machen, doch dann kommt einen Exception, die sagt dass es noch nicht implementiert ist. Schaut man in den Quellcode ist dort jedoch schon Code zu finden. Der ist jedoch noch nicht fertig und funktioniert noch nicht richtig? Oder wie soll man das verstehen? Was fehlt denn noch? Wie aufwändig wird es, das fehlende noch zu implementieren? Gibt es zeitliche Planungen für die Fertigstellung? PS: Welche von den beiden Archiven (himxml_246.7z, himxml_164.7z) ist die aktuelle Version? Man könnte meinen das wäre die himxml_246 weil 246 für 2.46 steht. Schaut man aber in die Archive rein, sind die neueren Dateien in 164 zu finden. Nach welchem Muster vergibst Du da die Versionsnummern? Gruß BlueStar |
AW: himXML (gesprochen himix ML)
Ja, mit diesem (De)Serialize gibt/gab es noch einige Problemchen :cry:
Diese Nummern in den Anhängen haben nichts zu sagen. Dieses stammen von der internen Verwaltung des alten Forums. - beide Dateien hießen himXML.7z und die Version war in den nun ebenfalls fehlenden Kommentaren aufgeführt. Das Aktuellere ist aber zufälliger Weise das mit der größeren Zahl (glaub ich). Was die Fertigstellung angeht: Bin grad/immernoch an einem anderem Projekt dran, welcher in der nächste himXML-Version verwendet werden soll. Eigentlich dachte ich irgendwo im Forum würde eine halbwegs funktioniere ältere Version der Objektserialisierung rumliegen, wenn ich nur wüßte wo ... hatte dazu mal 'nen Thread aufgemacht, wegen einiger Fragen zur Umsetzung. |
AW: himXML (gesprochen himix ML)
Hallo,
Hab deine Unit jetzt mal ausprobiert :mrgreen: Macht allerdings ein paar Probleme mit D2010:
Delphi-Quellcode:
Procedure TXMLNode.Serialize(C: TObject; SOptions: TXMLSerializeOptions = []; Proc: xXMLSerializeProc = nil);
Procedure _SavePropInfos(Node: xXMLNode; Info: PPropInfo); Const cTypeKind: Array[TTypeKind] of AnsiString = ('Unknown', 'Integer', 'Char', 'Enumeration', 'Float', 'String', 'Set', 'Class', 'Method', 'WChar', 'LString', 'WString', 'Variant', 'Array', 'Record', 'Interface', 'Int64', 'DynArray' , {$IF Declared(UnicodeString)} 'UString' {$IFEND}); Zitat:
Zitat:
Zitat:
|
AW: himXML (gesprochen himix ML)
hast du die mit der größeren Nummer (sind nur indexnummern des alten phpBBs) verwendet?
(eigentlich dachte ich ich hätte eine Version Oben, welche schon mit D2010 zurecht kommt) der gezeigte Codeausschnitt gehört jedenfalls zur älternen Version. :gruebel: Nja, ich bastel jetzt erstmal vorwiegend die Webseite, dann kommt da die Hilfe für's RegEx (ePCRE), die himXML und Anderes hin und danach wird's RegEx für's XPath ins himXML eingebaut und das himXML wieder auf selbstverwaltete (Refferenzzählung) Interfaces umgestellt. Wird irgendwie langsam zuviel, um noch alles zu überblicken, da Vieles zusammenhängt. |
AW: himXML (gesprochen himix ML)
Habe diese Version hier: himxml_246.7z
Wenn das die ältere Version sein sollte, dann ist die Benennung ziemlich irritierend :? |
AW: himXML (gesprochen himix ML)
Nja, original hießen beide mal himXML.7z und die Versionen standen in den nun nicht mehr existierenden Dateikommentaren.
hab nochmal reingesehn ... es ist doch andersrum :shock: (wie gesagt, die Dateinamen sind nicht von mir, daran isses neue Forum Schuld) himxml_246 = v0.9 21.05.2009 himxml_164 = v0.99d 12.01.2010 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 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