PB4.1 Beta erste XML Beispiele/Tests
Ein weiterer Unterschied:
Mit XML lassen sich baumartige Datenstrukturen (und zwar beliebige) direkt darstellen bzw. speichern. Bei Preferences (bzw. INI-Dateien) folgen die Abschnitte sequentiell aufeinander, sie lassen sich nicht verschachteln.
Ich freue mich sehr, dass PB 4.10 XML-Unterstützung mitbringt!
Gruß, Little John
Mit XML lassen sich baumartige Datenstrukturen (und zwar beliebige) direkt darstellen bzw. speichern. Bei Preferences (bzw. INI-Dateien) folgen die Abschnitte sequentiell aufeinander, sie lassen sich nicht verschachteln.
Ich freue mich sehr, dass PB 4.10 XML-Unterstützung mitbringt!
Gruß, Little John
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
>> Mit XML lassen sich baumartige Datenstrukturen (und zwar beliebige)
Ergänzung: Ausserdem als TreeLinkList im Speicher zu verwenden (muß nicht
gespeichert werden)
Ergänzung: Ausserdem als TreeLinkList im Speicher zu verwenden (muß nicht
gespeichert werden)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Hier mal als einfaches assoziatives Array. Das witzige ist das man
kopieren, speichern und wieder einlesen kann.
kopieren, speichern und wieder einlesen kann.
Code: Alles auswählen
Structure sArray
*vt.l
obj.l
bno.l
EndStructure
Interface iArray
set(key.s,value.s)
get.s(key.s)
save(filename.s)
load(filename.s)
copy(*obj.sArray)
EndInterface
Procedure _copy(*this.sArray,*obj.sArray)
DeleteXMLNode(*obj\bno)
CopyXMLNode(*this\bno,RootXMLNode(*obj\obj))
EndProcedure
Procedure _save(*this.sArray,file.s)
SaveXML(*this\obj,file)
EndProcedure
Procedure _load(*this.sArray,file.s)
FreeXML(*this\obj)
*this\obj = LoadXML(#PB_Any,file)
EndProcedure
Procedure _set(*this.sArray,key.s,value.s)
Protected Node
Node = XMLNodeFromPath(*this\bno,key)
If Node : DeleteXMLNode(Node) : EndIf
Node = CreateXMLNode(*this\bno)
SetXMLNodeName(Node,key)
SetXMLNodeText(Node,value)
EndProcedure
Procedure.s _get(*this.sArray,key.s)
Protected Node = XMLNodeFromPath(*this\bno,key)
If Node
ProcedureReturn GetXMLNodeText(Node)
EndIf
EndProcedure
DataSection
AAVTable:
Data.l @_set(),@_get(),@_save(),@_load(),@_copy()
EndDataSection
Procedure NewArray()
Protected *obj.sArray
*obj = AllocateMemory(SizeOf(sArray))
*obj\vt = ?AAVTable
*obj\obj = CreateXML(#PB_Any,#PB_Ascii)
*obj\bno = CreateXMLNode(RootXMLNode(*obj\obj))
SetXMLNodeName(*obj\bno,"base")
ProcedureReturn *obj
EndProcedure
;##################################################################
;#
;# TEST
;#
;##################################################################
Test.iArray = NewArray()
Test\set("Erna","Hans")
Test\set("Herbert","Hilde")
Test\set("Dieter","Trude")
Test\save("blub.xml")
Test\set("Herbert","Heidi")
Test2.iArray = NewArray()
Test2\load("blub.xml")
test3.iArray = NewArray()
Test\copy(test3)
Debug Test2\get("Herbert")
Debug Test2\get("Erna")
Debug Test2\get("Dieter")
Debug "----------------"
Debug Test\get("Erna")
Debug Test\get("Herbert")
Debug Test\get("Dieter")
Debug "----------------"
Debug test3\get("Erna")
Debug test3\get("Herbert")
Debug test3\get("Dieter")
Sehr interessant, ich hatte mich sowieso schon gefragt wie man in PB am besten assoziative Arrays implementiert.
Aber mal 'ne blöde Frage zu einem Nebenaspekt. Wie kann man erreichen, dass die gespeicherte Datei etwa so aussieht ...
... dass also durch Zeilenumbrüche an den entspr. Stellen die XML-Datei besser für Menschen lesbar ist?
Gruß, Little John
Aber mal 'ne blöde Frage zu einem Nebenaspekt. Wie kann man erreichen, dass die gespeicherte Datei etwa so aussieht ...
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<base>
<Erna>Hans</Erna>
<Herbert>Hilde</Herbert>
<Dieter>Trude</Dieter>
</base>
Gruß, Little John
Hallo zusammen,
wenn ich in den hier aufegführten Beispielcodes bei den Adressen einen Umlaut einfüge, also z.B.:
dann läuft das Beispiel von ts-soft durch, ohne eine Fehlermeldung, bzw. einer Ausgabe der Namen und beim Beispiel von kiffi kommt eine Fehlermeldung "not well formed(invalid token)".
Könnte mir da jemand auf die Sprünge helfen warum das so ist?
Gruss
Peter
wenn ich in den hier aufegführten Beispielcodes bei den Adressen einen Umlaut einfüge, also z.B.:
Code: Alles auswählen
XML = "<adressen>"
XML + " <adresse>"
XML + " <vorname>Peter</vorname>"
XML + " <nachname>Pärker</nachname>"
XML + " </adresse>"
XML + " <adresse>"
XML + " <vorname>Bruce</vorname>"
XML + " <nachname>Wäine</nachname>"
XML + " </adresse>"
XML + " <adresse>"
XML + " <vorname>Clark</vorname>"
XML + " <nachname>Könt</nachname>"
XML + " </adresse>"
XML + "</adressen>"
Könnte mir da jemand auf die Sprünge helfen warum das so ist?
Gruss
Peter
Alle sagten "das geht nicht!" .... und dann kam einer der nichts davon wusste und machte es einfach.
pebo:
XML schreibt vor das bei fehlender XML Deklaration der Input als UTF-8 zu betrachten ist.
Du musst also entweder das in UTF-8 konvertieren, oder folgendes ganz
an den Anfang setzen:
Little John:
Die englische Hilfe zu XML ist in der beta1 bereits komplett drin.
XML schreibt vor das bei fehlender XML Deklaration der Input als UTF-8 zu betrachten ist.
Du musst also entweder das in UTF-8 konvertieren, oder folgendes ganz
an den Anfang setzen:
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
Die englische Hilfe zu XML ist in der beta1 bereits komplett drin.
Danke für den Hinweis.freak hat geschrieben:Die englische Hilfe zu XML ist in der beta1 bereits komplett drin.
Wenn ich mich recht erinnere, wird man bei der Installation gefragt, welche Sprachversion der Hilfedatei man installieren möchte, oder?
Wie wäre es, wenn bei Beta-Versionen in solchen Fällen bei der Installation ein Hinweis erscheint etwa wie:
Denn das ahnt man ja nicht.Achtung, die deutsche Hilfe ist in dieser Beta-Version noch nicht vollständig. Entsprechende Englischkenntnisse vorausgesetzt, empfehlen wir Ihnen die englische Hilfe zu installieren.
Ich denke, so ein Hinweis wäre auch im Interesse von Fantaisie Software selbst, denn Ihr hättet so mehr (potentielle) Beta-Tester.
Gruß, Little John