![]() |
msxml -> datentyp aus schema auslesen
Einen schönen guten Tag wünsche ich!
Meine Frage: Bevor ich meine XML-Datei lade füge ich die Schema datei hinzu. Dies klappt auch wunderbar. Wenn ich einen Fehler in der Datei habe, wird mir eine Fehlermeldung ausgegeben, in welcher Zeile die XML-Datei nicht konform zum angegeben Schema ist. Nun möchte ich aber den Datentyp eines Attributes auslesen. Die Methode get_dataType gibt "null" zurück, was wohl daran liegt, dass jene die schema-datei gänzlich ignoriert! Weiß jemand Hilfe? |
Re: msxml -> datentyp aus schema auslesen
Sehr schade, denn das Problem ist immer noch akut! Ich glaube es ist im Bereicht des Vertretbaren nach mehreren Tagen den Beitrag das erste und letzte Mal zu pushen.
Die Hoffung stirbt zuletzt... ;) |
Re: msxml -> datentyp aus schema auslesen
Hallo muedermann,
du hast gar nicht geschrieben, mit welchem Schema-Typ du es versucht hast. Ich vermute mal du bist mit XSD gescheitert. Bei DTD und XDR erhältst du die gewünschte Information. Halte die Hoffnung am Leben. Grüße vom marabu |
Re: msxml -> datentyp aus schema auslesen
Vielen Dank für deine tapferen Worte marabu.
Trotz dessen kommt das aber.... Soweit ich das jetzt nachgelesen habe, ist XDR ein Vorgänger Schema von XSD. DTD ist ohnehin veraltet. Gibt es für XSD keine Lösung? |
Re: msxml -> datentyp aus schema auslesen
Mit MSXML4 hast du wohl Pech. MSXML5 wird momentan nur mit MSO ausgeliefert - wenn die Integration von XSD dort besser ist, dann hilft es nicht viel, da wir alle auf ein public release warten müssen. Vielleicht kannst du dir ja mit etwas support code behelfen, der die Schema-Information eines beliebigen node für dich lokalisiert.
marabu |
Re: msxml -> datentyp aus schema auslesen
Ich verstehe es einfach nicht. Ich weise meiner XML-Datei ein XSD-Schema zu
Delphi-Quellcode:
Dann lade ich meine XML-Datei:
xmldoc.schemas := schemaCache;
Delphi-Quellcode:
Und wenn etwas nicht stimmt, wird es ausgegeben:
xmlDoc.load('C:\test.xml');
Delphi-Quellcode:
Beim dem Attribut "V" vom Element "Geboren" sieht das dann so aus:
if xmlDoc.parseError.errorCode <> 0 then
begin Showmessage(xmldoc.parseError.reason); end; --------------------------- Project1 --------------------------- Error parsing '1961-0a8-01' as date datatype. The attribute: 'V' has an invalid value according to its data type. --------------------------- OK --------------------------- Dies ist auch völlig korrekt. Nur wie verdammt komme ich an die Information datatype (die ja im schema steht), wenn ich kein Error bekomme?!?! |
Re: msxml -> datentyp aus schema auslesen
Grundsätzlich ist es nicht schwer auch ohne direkte Unterstützung des Parsers an die relevanten Informationen im Schema zu gelangen. Bilde den Pfadnamen für Knoten vom Typ ELEMENT und Attribut:
Delphi-Quellcode:
Mit diesem Pfadnamen kannst du dann in das Schema eintauchen. Für die Knoten auf dem Pfad lassen sich passende XPath Ausdrücke angeben, mit denen du auf die Schema-Definitionen zugreifen kannst. Oder du stellst fest, dass XDR doch nicht so veraltet ist...
function NodePath(dn: IDOMNode): string;
begin if Assigned(dn) then case dn.nodeType of ELEMENT_NODE: Result := NodePath(dn.parentNode) + '/' + dn.nodeName; ATTRIBUTE_NODE: Result := NodePath(dn.parentNode) + '/@' + dn.nodeName; else Result := ''; end else Result := ''; end; marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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