首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSXML:如何问IXMLDOMNode它来自哪个版本的MSXML?

MSXML:如何问IXMLDOMNode它来自哪个版本的MSXML?
EN

Stack Overflow用户
提问于 2009-09-25 14:18:01
回答 1查看 1.7K关注 0票数 1

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

如果您从MSXML的不同版本提供了一个IXMLDOMDocument,那么您将从msxml获得一个异常:

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

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

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

代码语言:javascript
复制
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版(因为微软的版本依赖于MSXML)。这将导致

代码语言:javascript
复制
xml.transformNode()

若要抛出COM异常:

代码语言:javascript
复制
It is an error to mix objects from different versions of MSXML.

既然微软能够问一个界面它来自什么版本的MSXML,那么我应该能够做同样的事情,但是怎么做呢?

另外,给定一个IXMLDOMNode,如何构造相同版本的XMLDOMDocument对象.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-11 17:46:18

我想出了一个答案(至少对MSXMLVersion6.0有效)。

接口类型:

代码语言:javascript
复制
DOMDocument60

它是从IXMLDOMDocument30派生而来的,而大多数人使用IXMLDOMDocument或IXMLDOMDocument2。

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

代码语言:javascript
复制
procedure DoStuff(doc: IXMLDOMdocument2);
begin
   if not (doc is IXMLDOMDocument3) then
       raise Exception.Create('badness');

   ...
end;

或者交替地:

代码语言:javascript
复制
procedure DoStuff(doc: IXMLDocument2);
begin
   if not (doc is DOMDocument6) then
   begin
      DoStuffLegacyImplementation(doc);
      Exit;
   end;

   //Real implementation
   ...
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1477559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档