我怎么知道 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
对象...
答案 0 :(得分: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;