Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi msxml -> datentyp aus schema auslesen (https://www.delphipraxis.net/57222-msxml-datentyp-aus-schema-auslesen.html)

muedermann 17. Nov 2005 13:13


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?

muedermann 21. Nov 2005 15:50

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... ;)

marabu 21. Nov 2005 17:10

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

muedermann 22. Nov 2005 07:45

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?

marabu 22. Nov 2005 08:06

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

muedermann 22. Nov 2005 14:06

Re: msxml -> datentyp aus schema auslesen
 
Ich verstehe es einfach nicht. Ich weise meiner XML-Datei ein XSD-Schema zu

Delphi-Quellcode:
xmldoc.schemas := schemaCache;
Dann lade ich meine XML-Datei:

Delphi-Quellcode:
xmlDoc.load('C:\test.xml');
Und wenn etwas nicht stimmt, wird es ausgegeben:

Delphi-Quellcode:
if xmlDoc.parseError.errorCode <> 0 then
begin
   Showmessage(xmldoc.parseError.reason);
end;
Beim dem Attribut "V" vom Element "Geboren" sieht das dann so aus:
---------------------------
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?!?!

marabu 22. Nov 2005 18:21

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:
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;
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...

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