Как создать документ TXML, используя MSXML 6.0 в Delphi 7? - PullRequest
3 голосов
/ 09 сентября 2011

MSXML 6.0 не существовало на момент выпуска Delphi 7. Можно ли настроить документ TXML Delphi для использования MSXML 6.0 вместо более старых версий?

Ответы [ 2 ]

10 голосов
/ 10 сентября 2011

Добавьте приведенный ниже код к имени устройства uMSXMLVersion или вашему выбору и добавьте его в свои проекты, используя

{----------------------------------------------------------------------------    
  Set Delphi's XMLDocument to use MSXML v6.0

  Usage:  Include unit in project "uses"-list and Delphi will automatically use
          MSXML v6.0 for TXmlDocument.
-----------------------------------------------------------------------------}
unit uMSXMLVersion;

interface

implementation

uses ActiveX, MSXML, MSXMLDOM;

function CreateDOMDocumentEx: IXMLDOMDocument;
const
  CLASS_DOMDocument60: TGUID = '{88D96A05-F192-11D4-A65F-0040963251E5}';
begin
  Result := nil;
  if CoCreateInstance(CLASS_DOMDocument60, nil, CLSCTX_INPROC_SERVER or
    CLSCTX_LOCAL_SERVER, IXMLDOMDocument, Result) <> S_OK then
  Result := CreateDOMDocument; //call the default implementation
end;

initialization
  MSXMLDOMDocumentCreate := CreateDOMDocumentEx;

end.
8 голосов
/ 10 сентября 2011

Блок msxmldom.pas предоставляет общедоступный хук MSXMLDOMDocumentCreate, которому вы можете назначить пользовательский обработчик, например:

uses
  ..., msxmldom;

const
  CLASS_DOMDocument60: TGUID = '{88D96A05-F192-11D4-A65F-0040963251E5}';

function CreateMSXML6Document: IXMLDOMDocument;
var
  Disp: IDispatch;
begin
  OleCheck(CoCreateInstance(CLASS_DOMDocument60, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IDispatch, Disp));
  Result := Disp as IXMLDOMDocument;
  if not Assigned(Result) then
    raise DOMException.Create('MSXML 6.0 Not Installed');
end;

initialization
  msxmldom.MSXMLDOMDocumentCreate := CreateMSXML6Document;
...