![]() |
XMLTextReader XMLStrukturen auslesen
Hallo,
ich habe derzeit ein problem beim auslesen einer XML Datei. also ich möchte mit dem XMLTextReader die XML Daten auslesen und in mein Objekt packen. Es geht um eine Bücherverwaltung. Das hier ist jetzt die XML Datei mit einem Buch eintrag
XML-Code:
So Auslesen tuhe ich mit dieser Routine
<Buecher>
<Buch Name="EinBuch"> <BuchTitel>EinTitel</BuchTitel> <BuchAuthor>EinAuthor</BuchAuthor> <ISBN>0299342</ISBN> <KaufDatum>07.10.2005 13:42:25</KaufDatum> <Genre>EinGenre</Genre> <VerliehenName/> <VerliehenDatum>01.01.0001 00:00:00</VerliehenDatum> <Beschreibung>Blabla</Beschreibung> <GelesenList> <Gelesen Nr="0"> <Start>04.10.2005 13:42:42</Start> <End>07.10.2005 13:42:42</End> </Gelesen> </GelesenList> </Buch> </Buecher>
Delphi-Quellcode:
Problem ist nun:
while AXMLTextReader.read do
begin if (AXMLTextReader.Name.ToLower.CompareTo('buch') = 0) and (AXMLTextReader.AttributeCount = 1) then begin ABookItem := AddNewBook(AXMLTextReader.Item[AXMLTextReader.AttributeCount - 1]); end; try if ABookItem <> nil then begin ABookItem.BookTitle := AXMLTextReader.ReadElementString('BuchTitel'); ABookItem.BookAuthor := AXMLTextReader.ReadElementString('BuchAuthor'); ABookItem.ISBN := AXMLTextReader.ReadElementString('ISBN'); ABookItem.BuyDate := Convert.ToDateTime(AXMLTextReader.ReadElementString('KaufDatum')); ABookItem.Genre := AXMLTextReader.ReadElementString('Genre'); ABookItem.LendToName := AXMLTextReader.ReadElementString('VerliehenName'); ABookItem.LendDate := Convert.ToDateTime(AXMLTextReader.ReadElementString('VerliehenDatum')); ABookItem.Description := AXMLTextReader.ReadElementString('Beschreibung'); AXMLTextReader.ReadStartElement('GelesenList'); if (AXMLTextReader.Name.ToLower.CompareTo(('Gelesen').ToLower) = 0) and (AXMLTextReader.AttributeCount = 1) then begin AReadItem := ABookItem.ReadList.AddReadItem; AReadItem.BeginRead := Convert.ToDateTime(AXMLTextReader.ReadElementString('Start')); AReadItem.EndRead := Convert.ToDateTime(AXMLTextReader.ReadElementString('End')); end; end; except end; end; finally AXMLTextReader.Close; end; Das AReadItem mit seinen 2 Propertys wird nicht gefüllt. Und ich weiß nicht warum. Wenn mir hierbei jemand helfen könnte wäre das echt genial. greetz Master_BB |
Re: XMLTextReader XMLStrukturen auslesen
hallo Master,
warum Deserialisierst du nicht? ist meiner Meinung die bessere Variante. du hast doch einen Typ Buch, oder? raik edit// das Deserialisieren
Delphi-Quellcode:
function Deserialisieren(FileName: string; ObjType: &Type):TObject;
var Ser : XmlSerializer; Reader : StreamReader; begin Reader := StreamReader.Create(FileName); Ser := XmlSerializer.Create(ObjType); Result := Ser.Deserialize(Reader); Reader.Close; end; |
Re: XMLTextReader XMLStrukturen auslesen
hm ich hab ein
TBookItem mit entsprechenden Propertys. was gibt mir serialize zurück ein gefülltes TBookItem? woher soll der serializer wissen welcher tag zu welcher Propertys meines TBookItems gehört? |
Re: XMLTextReader XMLStrukturen auslesen
probiere es einfach aus
Delphi-Quellcode:
raikBookItem:= Deserialisieren('DeineDatei.xml', typeOf(TBookItem)) as TBookItem; |
Re: XMLTextReader XMLStrukturen auslesen
du hättest ruhig noch sagen können das wenn man per deserialize ein
Object aus einer XML datei lesen will man das auch mit Serialize geschrieben haben sollte. |
Re: XMLTextReader XMLStrukturen auslesen
sorry habe ich vergessen :oops: .
hat es denn geklaptt? raik |
Re: XMLTextReader XMLStrukturen auslesen
es würde mit dem Serializer klappen wenn ich nur ein TBookItem hätte.
Da der Serialize befehl des Serializers aber anscheinend keine ArrayListe von TBookItems in eine XML File schreiben kann kann ich wohl den kompletten Serializer vergessen. |
Re: XMLTextReader XMLStrukturen auslesen
hallo Master,
klar kannst du auch Array's serialisieren. lies dich mal schlau im Internet. raik edit// eine Einschränkung noch, ob es mit Delphi.Net geht kann ich dir erst morgen sagen :mrgreen: mit c# und #develop geht es prima. |
Re: XMLTextReader XMLStrukturen auslesen
Zitat:
Ich habe es heute mal auf Grund eines simplen ![]() Mich würde aber interessieren, ob man die Namespaces beeinflussen kann, oder ob man mit den Vorgaben
XML-Code:
leben muss. Ich meine, wie man den Namen des Rootknotens <ArrayOfPerson> ändert und wie man aus Knoten Attribute macht, das weiß ich. :mrgreen:
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
Re: XMLTextReader XMLStrukturen auslesen
@mathias,
kann ich dir auch nicht sagen und der der es sagen könnte antwortet nicht mehr in thread's mit Delphi.net. :wall: das beste ist du quatscht ihn persönlich an :mrgreen: raik |
Re: XMLTextReader XMLStrukturen auslesen
aja ok ich habs,
nun also hier die lösung zum Serialisieren und Deserialisieren einer ArrayList in Delphi .NET ohne VCL
Delphi-Quellcode:
so hab ich mir ja fast meine zarten finger wund geschrieben
//Alle objekte einer ArrayList in xml speichern
//Item objekte die in der Liste sind TMyItem = class protected Fname : String; public property Name : string read FName; end; [XmlInclude(typeof(TMyItem))] //WICHTIG TMyItemsArrayList = class(ArrayList) .... var AMyItemsArrayList : TMyItemsArrayList; procedure SaveToXML; var AXMLSerializer : XMLSerializer; AXMLTextWriter : XMLTextWriter; begin AXMLTextWriter := XMLTextWriter.Create('c:\myfile.xml'); try AXMLSerializer := XMLSerializer.Create(TypeOf(TMyItemsArrayList)); AXMLSerializer.Serialize(AXMLTextWriter, AMyItemsArrayList); finally AXMLTextWriter.Close; end; end; function LoadXML : TMyItemsArrayList; var AXMLSerializer : XMLSerializer; AXMLTextReader : XMLTextReader; begin Result := nil; AXMLTextReader := AXMLTextReader.Create('c:\myfile.xml'); try AXMLSerializer := XMLSerializer.Create(TypeOf(TMyItemsArrayList)); Result := TMyItemsArrayList(AXMLSerializer.Deserialize(AXMLTextReader)); finally AXMLTextReader.Close; end; end; an dem beispiel. ja ich denke der code ist selbsterklärend. Greetz |
Re: XMLTextReader XMLStrukturen auslesen
Zitat:
Den Grund dafür siehst du zum Beispiel am Post von unserem "Master". Da ich ihn hier nicht runterputzen will, lasse ich ihm einfach in dem Glauben, dass sei .Net code... ;) |
Re: XMLTextReader XMLStrukturen auslesen
hm wiso sollte es kein .NET code sein?
ich habe nur .NET Framework Units eingebunden. wenn es kein .NET code ist liegts aber an Delphi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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