左
左轻侯
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?
请看下面这个例子:
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?