2010-09-13 13 views
5

Ho un servizio Web C# che restituisce un XML come risultato che verrà utilizzato da un'applicazione Delphi 7. Normalmente, restituirei una classe .Net XmlDocument se avessi un client .Net, ma, per Delphi, restituirò una stringa. Di seguito è riportato il codice C# servizio Web:Convalida lo schema XML in Delphi ricevuto dal servizio Web C# come parametro

public String ReturnXML() 
{ 
    XmlDocument xmlDoc = GenerateXmlMethod(); 
    String sXmlResult = String.Empty; 
    if (xmlDoc != null) 
    { 
     using (StringWriter oXml = new StringWriter()) 
     { 
      xmlDoc.Save(oXml); 
      sXmlResult = oXml.ToString(); 
     } 
    } 
    return sXmlResult; 
} 

In Delphi, ho ottenuto il codice qui sotto da un'altra domanda here a StachOverflow, e funziona perfettamente se dovessi caricare il XML e XSD dal disco, ma ho bisogno di caricarlo dalla memoria. Qui di seguito è il mio codice Delphi ora:

procedure TfrmTestador.Button3Click(Sender: TObject); 
var 
    XML, XSDL, XSDLDom: Variant; 
begin 
    XSDLDom := CreateOLEObject('MSXML2.DOMDocument.6.0'); 
    try 
    XSDLDom.async := false; 
    XSDLDom.load('C:\Temp\XsdFile.xsd'); 
    XSDL := CreateOLEObject('MSXML2.XMLSchemaCache.6.0'); 
    try 
     XSDL.add('',XSDLDom); 
     XML := CreateOLEObject('Msxml2.DOMDocument.6.0'); 
     try 
     XML.validateOnParse := True; 
     XML.resolveExternals := True; 
     XML.schemas := XSDL; 
     XML.load('C:\Temp\XmlFile.xml'); 
     ShowMessage(XML.parseError.reason); 
     finally 
     XML := Unassigned; 
     end; 
    finally 
     XSDL := Unassigned; 
    end; 
    finally 
    XSDLDom := Unassigned; 
    end; 
end; 

Quale sarebbe il codice Delphi per caricare il XSD e XML da WideString variabili, e farla lavorare come il codice che li carica da file, validazione del XML su una fissa Schema XSD codificato nell'applicazione? C'è un modo migliore per restituire l'XML da C# in modo che sia letto più facilmente in Delphi?
Tks per il tuo tempo!

risposta

5

La tua domanda si riduce a code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0".

Questa domanda è totalmente indipendente da Delphi, poiché si utilizza il linguaggio indipendente IXMLDOMDocument/DOMDocument dall'implementazione DOM Microsoft MSXML2 (che ha un eccellente on-line documentation).

loadXML method carica l'XML da una stringa (che integra lo load method, che lo carica da un URL).

Il codice allora diventerà qualcosa di simile:

XSDLDom.loadXML(XsdString); 
.... 
XML.loadXML(XmlString); 

BTW: Deepak Shenoy ha un nice whitepaper on using XML in Delphi che spiega di più su come utilizzare il DOM in Delphi.

- jeroen

+0

Tks man! Ha funzionato come un fascino. E anche tks per i link! – Pascal

Problemi correlati