AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi MSXML-Parser an Schema binden
Thema durchsuchen
Ansicht
Themen-Optionen

MSXML-Parser an Schema binden

Ein Thema von alzaimar · begonnen am 20. Jun 2005 · letzter Beitrag vom 20. Jun 2005
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 14:26
Hallo!
Ich habe ein XML-Schema mit dem XML-Databinding Wizzard importiert und der baut eine schnurkelige Unit, um auf das XML-Teil zuzugreifen.

Wenn ich jetzt aber ein XML-Dokument erzeugen will, soll er unbedingt den gleichen Aufbau benutzen, wie in der Schema-Datei.

Wie bringe ich MSXML dazu? Es muss doch sowas geben wie:
IXMLDocument.Schema := 'c:\schemas\mySchema.xsd' Aber, ich weiss nicht wie das gehen soll
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

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

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 14:57
Hallo alzaimar,

schau mal in die Dokumentation vom Platform SDK - "Referencing XSD Schemas in Documents" wäre dein Topic. Aber ich glaube du machst dir falsche Hoffnungen. Schemagebundene Validierung ist Bestandteil des Parsers, bei der Dokumentsynthese bist du auf eigene Programmlogik angewiesen. Ich treibe in meinen Projekten einigen Aufwand dazu - wenn ich meinen Code, der noch aus der Zeit der ersten MSXML.DLL stammt, ausmisten könnte, dann wäre ich nicht unglücklich. Bei der Synthese mittels DOM existiert zwar eine Methode validate(), aber die sagt dir nur, dass du was falsch gemacht hast, nachdem das Kind schon im Brunnen liegt.

Grüße vom marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 15:11


Danke trotzdem... Also bauen wir uns das selber...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 18:06
Wieso gibts sowas eigentlich nichtz? Ich meine, was spricht dagegen, einen XML-Dokument so aufzubauen, dass man meinetwegen zunächst eine Art beginUpdate()-Methode aufruft, dann die Änderungen macht und dann beim Aufruf von endUpdate() geprüft werden würde, ob die Änderungen dem Schema / dem DTD entsprechen. Falls ja, alles OK. Falls nein, weg damit.
Besteht da kein Bedarf, hatte bisher noch niemand die Idee, oder gibts das schon und ich habs nicht mitgekriegt?

Hm, weiß jetzt nicht, ob das direkt mit dem Thema zu tun hat, ich lasse es mal drin, die Mods mögen mir verzeihen
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
marabu

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

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 19:17
Hallo Martin,

was du beschreibst, das gibt es. Das Validieren deiner Änderungen am IXMLDocument musst du allerdings selbst starten - mit doc.validate(). Eine automatische (nachträgliche) Prüfung wäre keine wesentliche Verbesserung. Was alzhaimar suchte war eine Methode, mit der man schema-konforme Änderungen durchführen kann. Die dafür benötigte Logik muss aber selbst implementiert werden.

marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 20:54
Hallo marabu!

Kannst Du mir einen klitzekleinen Tipp geben, wie ich aus einem TXMLSchema (in der Unit gleichen Namens) ein leeres XML-Dokument erzeugen kann. Zur Not eben zu Fuss, also z.B. mit einer kleinen rekursiven Prozedur, die einfach durch die Schema-Hierarchie durchgeht und die XML-Nodes im Dokument sukkezzive erzeugt.

Mein Problem ist, das ich, aufgrund von Termindruck, Faulheit und akuter Brett-Vorm-Kopferitis nicht verstehe, wie man das macht. Eigentlich habe ich von XML überhaupt keinen blassen Schimmer, ausser, das es mir den letzten Nerv raubt. Wie alles Neue

Also: Wo stehen die 'Feldnamen' des im Schema definierten 'Records' (ums mal mit Pascal-Notation zu beschreiben)?

Danke!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

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

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 21:50
Hallo alzaimar,

Zitat von alzaimar:
Kannst Du mir einen klitzekleinen Tipp geben
you sure make it sound easy.

Erstmal ein bischen überlegen. Du erzeugst ja schon XML-Dokumente, aber die sind nicht valide, wenn ich das richtig verstanden habe. Eventuell ist es wirtschaftlicher eine XSL-Transformation zu fahren, als einen (universellen) Generator zu schreiben. Wenn es zeitlich bei dir eng ist, dann solltest du ernsthaft den XSLT-Ansatz prüfen.

Ich habe zwei Generatoren im Einsatz. Der eine ist in einem XDR-gesteuerten Editor verbaut und hilft dem Anwender valide XML-Dokumente interaktiv zu erzeugen. Der andere erzeugt XML-Bücher aus einem Dutzend verschiedenen XML-Dokumentarten, wieder über XDR gesteuert. Der Aufwand ist relativ hoch, obwohl ich ein paar Restriktionen für das eh schon beschränkte XDR festgelegt habe. Also stelle dir das nicht zu leicht vor.

Wenn du zu dem Schluss kommst, dass es eine Generatorlösung sein muss, dann werde ich dich nicht im Regen stehen lassen.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: MSXML-Parser an Schema binden

  Alt 20. Jun 2005, 22:45
Ich glaube, das wäre ein Overkill und für mich zu viel für den Anfang. Ich habe ja nur relativ simple 'Records'. Sowas wie:
Delphi-Quellcode:
TRec = Record
  a : String;
  b : Integer;
  c : Array [0..n] of TAnotherRecord;
  d : Real
End;
bzw. das durch den Data Binding Wizzard erzeugte Interface. Ich werde also Folgendes versuchen:
Ich lese mir das Schema ein. Dank Deiner Weigerung, meine Frage zu beantworten, wo denn die Feld(=Element)Namen stehen, bin ich selbst drauf gekommen. Ich denke, ich bekomme es hin, anhand eines Schemas ein leeres XML-Dokument zu erzeugen, wobei alle 'Nodes' mit NULL-Werten belegt sind. Dadurch habe ich automatisch die richtige Reihenfolge. Anschließend fülle ich sie dann mit richtigen Werten. Das ist zwar alles Andere als performant, aber erstmal egal. Kann auch sein, das ich aus dem Schema einfach ein Codesnippet erstelle, das ich im Construktor einbaue. Damit sollte die korrekte Reihenfolge auch gewährleistet sein.

Wenn ich Fragen habe, weiss ich ja, wo ich laut rumheulen muss

Danke für den minimalistischen Tipp!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 12:32 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