AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi msxml -> datentyp aus schema auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

msxml -> datentyp aus schema auslesen

Ein Thema von muedermann · begonnen am 17. Nov 2005 · letzter Beitrag vom 22. Nov 2005
Antwort Antwort
muedermann

Registriert seit: 27. Sep 2004
11 Beiträge
 
#1

msxml -> datentyp aus schema auslesen

  Alt 17. Nov 2005, 14:13
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?
  Mit Zitat antworten Zitat
muedermann

Registriert seit: 27. Sep 2004
11 Beiträge
 
#2

Re: msxml -> datentyp aus schema auslesen

  Alt 21. Nov 2005, 16:50
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...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: msxml -> datentyp aus schema auslesen

  Alt 21. Nov 2005, 18:10
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
  Mit Zitat antworten Zitat
muedermann

Registriert seit: 27. Sep 2004
11 Beiträge
 
#4

Re: msxml -> datentyp aus schema auslesen

  Alt 22. Nov 2005, 08:45
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: msxml -> datentyp aus schema auslesen

  Alt 22. Nov 2005, 09:06
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
  Mit Zitat antworten Zitat
muedermann

Registriert seit: 27. Sep 2004
11 Beiträge
 
#6

Re: msxml -> datentyp aus schema auslesen

  Alt 22. Nov 2005, 15:06
Ich verstehe es einfach nicht. Ich weise meiner XML-Datei ein XSD-Schema zu

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

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?!?!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: msxml -> datentyp aus schema auslesen

  Alt 22. Nov 2005, 19:21
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:23 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