Проверка XML-схемы в Delphi, полученной веб-службой c # в качестве параметра - PullRequest
5 голосов
/ 13 сентября 2010

У меня есть веб-служба C #, которая возвращает XML в результате, который будет использоваться приложением Delphi 7. Обычно я бы возвращал класс .Net XmlDocument, если бы у меня был клиент .Net, но для Delphi я возвращаю строку. Ниже приведен код веб-службы C #:

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 я получил код ниже из другого вопроса здесь в 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 и XML из переменных WideString, и он будет работать как код, который загружает их из файла, проверяя XML в фиксированной схеме XSD, которая закодирована в приложении? Есть ли лучший способ вернуть XML из C #, чтобы его было легче читать в Delphi?
Ткс за ваше время!

1 Ответ

5 голосов
/ 13 сентября 2010

Ваш вопрос сводится к code to load the XSD and the XML from WideString variables using "MSXML2.DOMDocument.6.0".

Этот вопрос полностью не зависит от Delphi, поскольку вы используете независимый от языка IXMLDOMDocument / DOMDocument от реализации DOM от Microsoft MSXML2 (с превосходной онлайновой документацией ).

Метод loadXML загрузит XML из строки (которая дополняет метод загрузки , который загружает его из URL-адреса).

Тогда ваш код станет примерно таким:

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

Кстати: Дипак Шеной имеет хороший документ по использованию XML в Delphi , который объясняет больше о том, какиспользуйте DOM в Delphi.

- jeroen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...