1

我怎么能问IXMLDOMDocument2是什么版本的 MSXML?给定一个IXMLDOMDocument2我需要创建另一个相同版本的文档。

如果你从不同版本的 MSXML 中给出一个 IXMLDOMDocument,你会从 msxml 中得到一个异常:

混合来自不同版本的 MSXML 的对象是错误的。

微软内部可以询问接口它来自哪个版本的 MSXML,我需要访问相同的东西。


考虑以下用伪代码编写的假设函数:

String XMLTransform(IXMLDOMNode xml, String xsl)
{
    //Create a document to hold the xml
    IXMLDOMDocument2 xslDocument = new CoDOMDocument();

    //load the xsl string into the xsl dom document
    xslDocument.loadXML(xsl);

    //transform the xml
    return xml.transformNode(xslDocument);     
}

问题是,如果 IXMLDOMNode 来自,比如MSXML6。创建DOMDocument的是版本 3(因为 Microsoft 在 MSXML 中的版本依赖性)。这将导致

xml.transformNode()

抛出 COM 异常:

It is an error to mix objects from different versions of MSXML.

既然微软能够询问一个接口它来自哪个版本的 MSXML,我应该能够做同样的事情,但是怎么做呢?

或者,给定一个IXMLDOMNode,我如何构造一个XMLDOMDocument相同版本的对象......

4

1 回答 1

0

我想出了一个答案(至少适用于 MSXML 6.0 版)。

接口类型:

DOMDocument60

继承自IXMLDOMDocument30,而大多数人使用 IXMLDOMDocument 或 IXMLDOMDocument2。

因此,如果传递的接口至少不支持 IXMLDOMDocument3,那么我知道该对象至少不是版本 6:

procedure DoStuff(doc: IXMLDOMdocument2);
begin
   if not (doc is IXMLDOMDocument3) then
       raise Exception.Create('badness');

   ...
end;

或者:

procedure DoStuff(doc: IXMLDocument2);
begin
   if not (doc is DOMDocument6) then
   begin
      DoStuffLegacyImplementation(doc);
      Exit;
   end;

   //Real implementation
   ...
end;
于 2010-05-11T17:46:18.160 回答