AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Woher weiß ich, von welchem Typ meine XML-Inhalte sind?
Thema durchsuchen
Ansicht
Themen-Optionen

Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

Ein Thema von Der schöne Günther · begonnen am 9. Aug 2013 · letzter Beitrag vom 11. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 12:37
Einfaches Beispiel:
Code:
<rootNode>
   <eineZahl>42</eineZahl>
   <einBoolean>False</einBoolean>
   <einFloat>99.3</einFloat>
</rootNode>
Bislang bin ich immer hingegangen und
  • habe den gesuchten Knoten (z.B. "eineZahl") gesucht (Typ IXMLNode)
  • mir den enthaltenen Wert geholt (IXMLNode.NodeValue)
  • und diesen Wert in eine Variable gesteckt (meineZahl := meinKnoten.NodeValue).

Ich habe mich immer gefreut, dass der implizite Cast von NodeValue nach irgendwohin so toll funktioniert. NodeValue ist übrigens vom Typ OleVariant . Nun möchte ich nicht mehr implizit irgendwohin casten, sondern wissen, was für ein Typ das überhaupt ist. System.Variants.VarType(Variant):TVarType liefert leider immer OleStr zurück.

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:
<rootNode>
   <eineZahl type="Integer">42</eineZahl>
   <einBoolean type="Boolean">False</einBoolean>
   <einFloat type="Single">99.3</einFloat>
</rootNode>
Mit IXMLNode.NodeType 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.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 12:52
Wenn Du das brauchst einfach ein Schema dazu machen.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 13:02
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?
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 13:11
Was willst du denn mit den Werten machen, wozu du den Typ wissen musst?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 13:29
, denn der Aufbau und Inhalt des XML-Blocks unterliegt eigentlich keinen Regeln.
dann gib doch den Typen mit!?
Code:
 <eineZahl=Integer>42</eineZahl>
   <einBoolean=Bool>False</einBoolean>
   <einFloat=Float>99.3</einFloat>
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 13:50
Das habe ich bislang ja auch vor. Andere Ideen (wie Typen über Schemas oder DTDs angeben) sind aber immer willkommen

Was willst du denn mit den Werten machen, wozu du den Typ wissen musst?
Ich will den Kram ohne etwas damit zu tun in eine Baumansicht packen damit der Benutzer den Inhalt verändern kann. Lese ich beispielsweise einen Boolean, soll der Benutzer einfach ein Häkchen dort setzen oder wegnehmen können. Lasse ich ihn weiterhin reinen Text dort eingeben, gibt er wahrscheinlich "Nein" oder "Si" ein.

Mehr steckt eigentlich nicht dahinter...
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 13:56
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?
Uli Gerhardt
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 17:35
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
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#9

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 9. Aug 2013, 19:05
XML kennt nur Strings. Wie was evaluiert wird, bestimmt das DTD-File.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Woher weiß ich, von welchem Typ meine XML-Inhalte sind?

  Alt 10. Aug 2013, 07:30
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?
Wenn ein XML Schema vorhanden ist (im XSD Format), dann kann Delphi daraus über den Schema Binding Wizard (ab Professional enthalten) eine Klassenstruktur erzeugen, die typsichere Properties hat. Man arbeitet dann nicht mehr mit NodeValue. Die IDE unterstützt dann die Auswahl der Properties durch CodeInsight (Punkt + Leertaste -> Anzeige aller an dieser Stelle der XML Hierarchie sichtbaren Elemente).
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz