2010-09-13 7 views
5

J'ai un service Web C# qui renvoie un code XML comme résultat qui sera consommé par une application Delphi 7. Normalement, je retournerais une classe .Net XmlDocument si j'avais un client .Net, mais, pour Delphi, je retourne une chaîne. Ci-dessous le code C# Service Web:Validez le schéma XML dans Delphi reçu par le service Web C# en tant que paramètre

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; 
} 

Dans Delphi, je suis le code ci-dessous d'une autre question here à StachOverflow, et il fonctionne parfaitement si je devais charger le XML et XSD à partir du disque, mais je dois chargez-le de la mémoire. Voici mon code Delphi maintenant:

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; 

Quel serait le code Delphi pour charger le XSD et XML à partir de variables WideString, et l'ont travaillé comme le code qui les charge à partir du fichier, la validation du XML sur un fixe Schéma XSD codé dans l'application? Existe-t-il un meilleur moyen de renvoyer le code XML de C# afin qu'il soit lu plus facilement dans Delphi?
Tks pour votre temps!

Répondre

5

Votre question se résume à code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0".

Cette question est totalement indépendante de Delphi, car vous utilisez le langage indépendant IXMLDOMDocument/DOMDocument de l'implémentation DOM Microsoft MSXML2 (qui a un excellent on-line documentation). Le loadXML method chargera le code XML à partir d'une chaîne (qui complète le load method, qui le charge à partir d'une URL).

Votre code deviendra alors quelque chose comme ceci:

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

BTW: Deepak Shenoy a une nice whitepaper on using XML in Delphi qui explique plus sur la façon d'utiliser le DOM en Delphi.

--jeroen

+0

Tks man! Travaillé comme un charme. Et tks pour les liens aussi bien! – Pascal

Questions connexes