![]() |
Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Einfaches Beispiel:
Code:
Bislang bin ich immer hingegangen und
<rootNode>
<eineZahl>42</eineZahl> <einBoolean>False</einBoolean> <einFloat>99.3</einFloat> </rootNode>
Ich habe mich immer gefreut, dass der implizite Cast von
Delphi-Quellcode:
nach irgendwohin so toll funktioniert. NodeValue ist übrigens vom Typ
NodeValue
Delphi-Quellcode:
. Nun möchte ich nicht mehr implizit irgendwohin casten, sondern wissen, was für ein Typ das überhaupt ist.
OleVariant
Delphi-Quellcode:
liefert leider immer
System.Variants.VarType(Variant):TVarType
Delphi-Quellcode:
zurück.
OleStr
Mir ist klar, dass die Sache nicht eindeutig ist: "42" könnte ein Integer, eine Fließkommazahl oder ein String sein. Was ist der beste Ansatz? In der XML für jeden Knoten anzugeben, von welchem Typ er ist? Beispiel:
Code:
Mit
<rootNode>
<eineZahl type="Integer">42</eineZahl> <einBoolean type="Boolean">False</einBoolean> <einFloat type="Single">99.3</einFloat> </rootNode>
Delphi-Quellcode:
kann ich auch nichts anfangen, das sagt ja nur aus, was für einen Stellenwert der Knoten selbst in der XML hat, nichts über seinen Inhalt.
IXMLNode.NodeType
|
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Wenn Du das brauchst einfach ein
![]() |
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Ich weiß nicht, ob das das richtige wäre.
Die XML-Blöcke werden mittels IPC ausgetauscht, ich wüsste spontan nicht, wie ich ein Schema oder eine DTD (evtl. auch auf unterschiedlichen Maschinen) referenzieren sollte. Ich würde ungern nebenher ein Schema pflegen bzw dynamisch erstellen, denn der Aufbau und Inhalt des XML-Blocks unterliegt eigentlich keinen Regeln. Außerdem wüsste ich spontan nicht, wie ich in Delphi mittels MSXML mit dem Schema arbeiten könnte. Ich glaube nicht, dass mir NodeValue dann plötzlich ein OleVariant von einem passenderen Typ zurückgibt? |
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Was willst du denn mit den Werten machen, wozu du den Typ wissen musst?
|
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Zitat:
Code:
Gruß
<eineZahl=Integer>42</eineZahl>
<einBoolean=Bool>False</einBoolean> <einFloat=Float>99.3</einFloat> K-H |
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Das habe ich bislang ja auch vor. Andere Ideen (wie Typen über Schemas oder DTDs angeben) sind aber immer willkommen :-)
Zitat:
Mehr steckt eigentlich nicht dahinter... |
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Kannst du dafür nicht irgendwie das Wissen, das du im Ursprungspost beschrieben hast (von wegen NodeValue von "eineZahl" lesen, auf **Integer**-Variable meineZahl zuweisen usw.) zugreifbar machen?
|
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Ja, im ersten Fall wusste ich genau, dass zwischen den Tags <beliebigeZahl> ein Integer steht. Jetzt habe ich ein anderes Szenario und habe kein Wissen über die zu erwartende Strukturierung der Daten.
Ich gebe jetzt immer den Datentyp als Attribut des Knotens mit. Ist zwar etwas hässlich, immer das Attribut anzuschauen und dann eine dicke Fallunterscheidung für alle Typen die man unterstützen möchte... Aber besser als nichts ;-) |
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
XML kennt nur Strings. Wie was evaluiert wird, bestimmt das DTD-File.
|
AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 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