2010-09-13 15 views
5

Tengo un servicio web C# que devuelve como resultado un XML que será consumido por una aplicación Delphi 7. Normalmente, devolvería una clase .Net XmlDocument si tuviera un cliente .Net, pero, para Delphi, devolveré una cadena. A continuación se muestra el código # servicio Web C:Validar el esquema XML en Delphi recibido por el servicio web C# como un parámetro

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

En Delphi, me dieron el código de abajo de otra pregunta here en StachOverflow, y funciona perfectamente si tuviera que cargar el XML y XSD desde el disco, pero necesito cargarlo desde la memoria. A continuación se muestra el código Delphi ahora:

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; 

¿Cuál sería el código de Delphi para cargar el XSD y XML desde WideString las variables, y lo han de trabajar como el código que los carga de archivos, validar el XML en un fijo Esquema XSD que está codificado en la aplicación? ¿Hay alguna forma mejor de devolver el XML de C# para que se pueda leer más fácilmente en Delphi?
¡Gracias por su tiempo!

Respuesta

5

Su pregunta se reduce a code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0".

Esa pregunta es totalmente independiente de Delphi, ya que está utilizando el lenguaje independiente IXMLDOMDocument/DOMDocument de la implementación de Microsoft MSXML2 DOM (que tiene excelente on-line documentation).

El loadXML method cargará el XML de una cadena (que complementa el load method, que lo carga desde una URL).

su código a continuación, se convertirá en algo como esto:

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

Por cierto: Deepak Shenoy tiene un nice whitepaper on using XML in Delphi que explica más sobre cómo utilizar el DOM en Delphi.

--jeroen

+0

Tks man! Trabajado como un encanto. ¡Y también para los enlaces! – Pascal

Cuestiones relacionadas