关于MSXML的古怪问题(100分)

  • 主题发起人 主题发起人 左轻侯
  • 开始时间 开始时间

左轻侯

Unregistered / Unconfirmed
GUEST, unregistred user!
正在写离线浏览器的XML部分,听从孙头儿的推荐,使用MSXML 3.0
请看下面这个例子:
var
xmlobj,node,nodes:variant;
begin
ListBox1.Clear;
xmlobj := CreateOLEObject('MSXML2.DOMDocument');
xmlobj.async := false;
xmlobj.load('c:/updates_today.xml');
node := xmlobj.selectSingleNode('LIST/HEADER/RecCount');
if not VarIsEmpty(node) then
Label1.Caption := Node.text;
nodes := xmlobj.selectNodes('LIST/Q/from');
node := nodes.nextNode;
ListBox1.Items.Add(node.text);
while not VarIsEmpty(node) do
begin
ListBox1.Items.Add(node.text);
node := nodes.nextNode;
end;
end;

无法通过,弹出对话框“找不到成员”
问题出在
node := nodes.nextNode;
这一句。奇怪的是,仅仅执行方法又可以:
nodes.nextNode;

折腾了一个下午毫无进展,干脆换成接口:
var
xmlobj: IXMLDOMDocument;
node:IXMLDOMNode;
nodes:IXMLDOMNodeList;
Nodemap: IXMLDOMNamedNodeMap ;
begin
ListBox1.Clear;
xmlobj := CreateOLEObject('MSXML2.DOMDocument') as IXMLDOMDocument;
xmlobj.async := false;
xmlobj.load('c:/updates_today.xml');
node := xmlobj.selectSingleNode('LIST/HEADER/RecCount');
if Assigned(node) then
Label1.Caption := Node.text;
nodes := xmlobj.selectNodes('LIST/Q/from');
node := nodes.nextNode;
ListBox1.Items.Add(node.text);
while Assigned(node) do
begin
ListBox1.Items.Add(node.text);
node := nodes.nextNode;
end;

end;
一切正常!
二者在语法上毫无区别(原样拷贝过来的),只是一个用了variant,一个用了
interface而已。
怎么会出现这种现象?MSXML的BUG?
 
无人理睬?
有分啊
 
再踢一脚
 
呵呵
我试了一把
跟左轻侯的结果一样
不知道为什么
 
100大分没人要?
孙校长知道么?
 
还是无人理睬?
好,这100分归wrench了
 
刚刚看到,开了眼界:)
 
我是发生这样的问题. 但在vb中就可以
不知道友生么好的办法??
 
后退
顶部