Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[Delphi5] Hoe een DOMdocument met SAX-parser valideren ?

None
2 antwoorden
  • Met behulp van de COM-objecten van MSXML4.dll kan ik wel een bestandsnaam aan een SAX-parser-COM-object doorgeven en laten valideren.

    Maar het lukt me niet om hetzelfde met een DOMdoc te doen, terwijl dat volgens deze link : http://msdn.microsoft.com/library/en-us/xmlsdk/htm/sax_devgd_hdi_domtosax_56bb.asp?frame=true

    Toch wel moet kunnen …
    probleem : het voorbeeld staat in VB geschreven op de site en de Delphi-vertaling lukt niet.

    – edit –
    beter gezegd, wat is de Delphi-vertaling van dit stuk
    [code:1:a105ba98ef]

    // Set the XML writer to the SAX content handler.
    Set rdr.contentHandler = wrt
    Set rdr.dtdHandler = wrt
    Set rdr.errorHandler = wrt

    [/code:1:a105ba98ef]
    Als ik er van uit ga dat ik dit :
    [code:1:a105ba98ef]
    Dim wrt As New MXXMLWriter40
    [/code:1:a105ba98ef]
    moet vertalen als :
    [code:1:a105ba98ef]
    var
    wrt : TMXXMLWriter40
    begin
    wrt := TMXXMLWriter40.Create(Nil);

    [/code:1:a105ba98ef]
    ———-

    Als ik ipv dat gewoon het DomDoc via reader.parse() doorgeef, dan wordt er niet tegen het schema gevalideerd (tenminste : er volgen geen foutmeldingen over de inhoud v/h XML-bericht terwijl dat wel zou moeten!), terwijl dat in de 'normale' versie wel deed.

    Enige hints ?
  • oftewel : waar is Bill Gates nu helemaal mee bezig ? ;)

    [code:1:0b91a4a160]
    procedure TMyOwnValidator.ValidateDOM(aDoc, aSchema,
    aBusinessrules: OleVariant; out aErrorlog: OleVariant);
    begin
    FValidator.ClearErrors;
    // FValidator.ErrorDomDoc := aErrorLog;

    //Add the schema file to the schema cache.
    FSchemaCache.DefaultInterface.add('', aSchema);

    //Configure the SAX reader to validate the XML document.
    FXmlReader.DefaultInterface.putFeature('schema-validation', True);
    FXmlReader.DefaultInterface.putFeature('exhaustive-errors', True);
    FXmlReader.DefaultInterface.putFeature('http://xml.org/sax/features/namespace-prefixes', True);
    FXmlReader.DefaultInterface.putFeature('http://xml.org/sax/features/external-parameter-entities', True);

    FXmlReader.DefaultInterface.putProperty('schemas', FSchemaCache.DefaultInterface);
    aDoc.schemas := FSchemaCache.DefaultInterface;

    //Assign an instance of the MyValidator class to
    //the errorHandler property of the SAX reader.
    FXmlReader.DefaultInterface.errorHandler := FValidator;
    FXmlReader.DefaultInterface.contentHandler := Nil;

    //Parse and validate the file.
    FXmlReader.parse(aDoc.documentElement.Xml);

    // return error-log
    aErrorLog := FValidator.ErrorDomDoc;
    end;
    [/code:1:0b91a4a160]
    logisch ? …

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.