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'); 出错
为什么呢 ?
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'); 出错
为什么呢 ?
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
另外我印象中interface是不能使用as运算符的,IXMLDOMElement从名称上看是个interface而不是class,你的代码能编译过么?
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
-------------------错了,Interface才要用as,尤其一个对象实现多个接口的话,强制转型接口有可能会导致调用错误的方法的。
另外我印象中interface是不能使用as运算符的,IXMLDOMElement从名称上看是个interface而不是class,你的代码能编译过么?
当然编译通过了