2010-09-13 21 views
5

Tôi có một Dịch vụ Web C# trả về một kết quả XML sẽ được ứng dụng Delphi 7 tiêu thụ. Thông thường, tôi sẽ trả về một lớp Net XmlDocument nếu tôi có một máy khách .Net, nhưng, đối với Delphi, tôi sẽ trả về một chuỗi. Dưới đây là C# Web Service Code:Xác thực Lược đồ XML trong Delphi nhận được bởi dịch vụ web C# dưới dạng tham số

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

Trong Delphi, Tôi đã nhận mã dưới đây từ một câu hỏi here tại StachOverflow, và nó hoạt động hoàn hảo nếu tôi đã phải nạp XML và XSD từ đĩa, nhưng tôi cần phải tải nó từ bộ nhớ. Dưới đây là mã Delphi của tôi bây giờ:

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; 

Điều gì sẽ là mã Delphi để nạp XSD và XML từ WideString biến, và có nó làm việc như mã mà tải chúng từ tập tin, chứng thực XML trên một cố định Lược đồ XSD được mã hóa trong ứng dụng? Có cách nào tốt hơn để trả về XML từ C# vì vậy nó được đọc dễ dàng hơn vào Delphi?
Tks cho thời gian của bạn!

Trả lời

5

Câu hỏi của bạn được chuyển thành code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0".

Câu hỏi đó hoàn toàn độc lập với Delphi, vì bạn đang sử dụng ngôn ngữ độc lập IXMLDOMDocument/DOMDocument từ việc triển khai DOM MSXML2 của Microsoft (có xuất sắc on-line documentation).

loadXML method sẽ tải XML từ chuỗi (bổ sung load method, tải nó từ URL).

Mã của bạn sau đó sẽ trở thành một cái gì đó như thế này:

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

BTW: Deepak Shenoynice whitepaper on using XML in Delphi giải thích thêm về cách sử dụng DOM trong Delphi.

--jeroen

+0

Tks man! Làm việc như người ở. Và tks cho các liên kết là tốt! – Pascal

Các vấn đề liên quan