2010-09-13 30 views
5

我有一個C#Web服務,它返回一個XML,結果將會被Delphi 7應用程序使用。通常,如果我有.Net客戶端,我會返回一個.Net XmlDocument類,但是,對於Delphi,我返回一個字符串。下面是C#Web服務代碼:將Delphi中的XML Schema驗證爲C#web服務作爲參數

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

在Delphi中,我得到了另一個問題here下面的代碼在StachOverflow,和它完美的作品,如果我不得不從磁盤加載XML和XSD,但我需要從內存加載它。下面是我的Delphi代碼現在:

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; 

會是什麼Delphi代碼加載XSD和WideString的變量的XML,並且有工作作爲加載它們從文件中的代碼,驗證一個固定的XML已編碼到應用程序中的XSD架構?有沒有更好的方式從C#返回XML,以便更容易地讀入Delphi?
Tks爲您的時間!

回答

5

你的問題歸結爲code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0"

這個問題完全獨立於Delphi,因爲您使用的是Microsoft MSXML2 DOM實現(具有出色的on-line documentation)的獨立於語言的IXMLDOMDocument/DOMDocument

loadXML method將從字符串中加載XML(它補充了從URL加載它的load method)。

你的代碼會變得這樣的事情:

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

BTW:Deepak Shenoynice whitepaper on using XML in Delphi解釋更多關於如何在Delphi中使用DOM。

- jeroen

+0

Tks man!像魅力一樣工作。以及鏈接以及! – Pascal 2010-09-13 13:22:00