var 
  xmlnode, xmlnode1, xmlnode2: IXMLDOMElement;
  i, j: integer;
  pxmlnode: ^IXMLDOMElement;
 copynode:tlist;
begin
  copynode := TList.Create;
  copynode.Add(Pointer(xmlnode.cloneNode(true)));
  pxmlnode := copynode.Items[0];
  pxmlnode.getAttribute('name');
end
  我是用copynode 来存放我找到的msxml节点的克隆
  找到后,在读取里面的数据,
   pxmlnode.getAttribute('name'); 出错
  为什么呢 ? 
   

解决方案 »

  1.   

    我靠 我真是天才我自己搞定了 
    var 
      xmlnode, xmlnode1, xmlnode2: IXMLDOMElement; 
      i, j: integer; 
      pxmlnode: ^IXMLDOMElement; 
    copynode:tlist; 
    begin 
      copynode := TList.Create; 
      copynode.Add(Pointer(xmlnode.cloneNode(true))); 
      pxmlnode := copynode.Items[0]; 
      xmlnode := IXMLDOMElement(pxmlnode) as IXMLDOMElement;
      showmessage(xmlnode.getAttribute('name'));
    end 
      

  2.   

    interface是自动管理生存期的变量,在当前生存期结束就自动释放了
    另外我印象中interface是不能使用as运算符的,IXMLDOMElement从名称上看是个interface而不是class,你的代码能编译过么?
      

  3.   

    var
      xmlnode, xmlnode1, xmlnode2: IXMLDOMElement;
      i, j: integer;
      pxmlnode: ^IXMLDOMElement;
    copynode:tlist;
    begin
      copynode := TList.Create;
      copynode.Add(Pointer(xmlnode.cloneNode(true)));
      pxmlnode := copynode.Items[0];
      xmlnode := IXMLDOMElement(pxmlnode) as IXMLDOMElement;
    可以改为:xmlnode := IXMLDOMElement(pxmlnode); 

      showmessage(xmlnode.getAttribute('name'));
    end 
      

  4.   

    另外我印象中interface是不能使用as运算符的,IXMLDOMElement从名称上看是个interface而不是class,你的代码能编译过么? 
    -------------------错了,Interface才要用as,尤其一个对象实现多个接口的话,强制转型接口有可能会导致调用错误的方法的。
      

  5.   

    interface是自动管理生存期的变量,在当前生存期结束就自动释放了 
    另外我印象中interface是不能使用as运算符的,IXMLDOMElement从名称上看是个interface而不是class,你的代码能编译过么? 
     当然编译通过了
      

  6.   

    我知道为什么7楼说接口不能用as了:没有给接口设置GUID