2010-09-13 10 views
5

Mam usługę sieci Web C#, która zwraca XML jako wynik, który zostanie zużyty przez aplikację Delphi 7. Normalnie zwróciłbym klasę .Net XmlDocument, jeśli miałbym klienta .Net, ale dla Delphi zwracam ciąg znaków. Poniżej znajduje się kod C# Web Service:Sprawdzanie poprawności schematu XML w Delphi odbieranego przez usługę WWW C# jako parametr

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

W Delphi, mam poniżej kod z innym pytaniem here na StachOverflow i działa doskonale gdybym musiał załadować XML i XSD z dysku, ale muszę załaduj go z pamięci. Poniżej jest mój kod Delphi teraz:

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; 

Jaki byłby kod Delphi, aby załadować XSD i XML z WideString zmienne, i to działa jak kod, który ładuje je z pliku, walidacji XML na stałym Schemat XSD zakodowany w aplikacji? Czy istnieje lepszy sposób na zwrócenie XML z C#, aby łatwiej było go czytać w Delphi?
Tks za poświęcony czas!

Odpowiedz

5

Twoje pytanie sprowadza się do code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0".

To pytanie jest całkowicie niezależne od Delphi, ponieważ używasz niezależnego od języka IXMLDOMDocument/DOMDocument z implementacji Microsoft MSXML2 DOM (która ma znakomite on-line documentation).

Załaduje kod XML z ciągu znaków (który uzupełnia load method, który ładuje go z adresu URL).

Kod wtedy będzie coś takiego:

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

BTW: Deepak Shenoy ma nice whitepaper on using XML in Delphi która wyjaśnia więcej na temat korzystania z DOM w Delphi.

--jeroen

+0

Tks człowiek! Pracował jak urok. I tks za linki! – Pascal

Powiązane problemy