请教TXMLDocument运用于多线程
答案:2 悬赏:70 手机版
解决时间 2021-02-26 20:18
- 提问者网友:疯孩纸
- 2021-02-26 05:16
请教TXMLDocument运用于多线程
最佳答案
- 五星知识达人网友:封刀令
- 2021-02-26 06:42
uses
Classes,SysUtils,Forms,IniFiles,ADODB,DB,XMLDoc,XMLIntf,SyncObjs,ExtCtrls,StdCtrls;
//Get data value from xml
function GetXMLData(Str_NodeName,Str_AttrName,Str_DataXML:string;Str_ParentNodeName:string=''):string;
var
XML_Doc:TXMLDocument;
XML_RootNode,XML_ParentNode,XML_DataNode:IXMLNode;
begin
Result:='';
if Str_DataXML='' then
begin
Exit;
end;
XML_Doc:=TXMLDocument.Create(Application);
try
XML_Doc.LoadFromXML(Str_DataXML);
XML_Doc.Active:=True;
XML_RootNode:=XML_Doc.DocumentElement;
if Str_ParentNodeName='' then
begin
//Find Node
XML_DataNode:=XML_RootNode.ChildNodes.FindNode(Str_NodeName);
if XML_DataNode=nil then
begin
Result:='';
Exit;
end;
end else
begin
//Find Parent Node
XML_ParentNode:=XML_RootNode.ChildNodes.FindNode(Str_ParentNodeName);
if XML_ParentNode=nil then
begin
Result:='';
Exit;
end;
//Find Node
XML_DataNode:=XML_ParentNode.ChildNodes.FindNode(Str_NodeName);
if XML_DataNode=nil then
begin
Result:='';
Exit;
end;
end;
if XML_DataNode.HasAttribute(Str_AttrName) then
begin
Result:=XML_DataNode.Attributes[Str_AttrName];
end else
begin
Result:=XML_DataNode.Text;
end;
finally
XML_Doc.Free;
end;
end;
在DELPHI7中 16路甚至更多的线程频繁调用GetXMLData这个函数,经常报错,单步追踪到XML_Doc这个对象还没执行到XML_Doc.Free这里XML_Doc就变成nil了,实在想不明白为什么会这样子
Classes,SysUtils,Forms,IniFiles,ADODB,DB,XMLDoc,XMLIntf,SyncObjs,ExtCtrls,StdCtrls;
//Get data value from xml
function GetXMLData(Str_NodeName,Str_AttrName,Str_DataXML:string;Str_ParentNodeName:string=''):string;
var
XML_Doc:TXMLDocument;
XML_RootNode,XML_ParentNode,XML_DataNode:IXMLNode;
begin
Result:='';
if Str_DataXML='' then
begin
Exit;
end;
XML_Doc:=TXMLDocument.Create(Application);
try
XML_Doc.LoadFromXML(Str_DataXML);
XML_Doc.Active:=True;
XML_RootNode:=XML_Doc.DocumentElement;
if Str_ParentNodeName='' then
begin
//Find Node
XML_DataNode:=XML_RootNode.ChildNodes.FindNode(Str_NodeName);
if XML_DataNode=nil then
begin
Result:='';
Exit;
end;
end else
begin
//Find Parent Node
XML_ParentNode:=XML_RootNode.ChildNodes.FindNode(Str_ParentNodeName);
if XML_ParentNode=nil then
begin
Result:='';
Exit;
end;
//Find Node
XML_DataNode:=XML_ParentNode.ChildNodes.FindNode(Str_NodeName);
if XML_DataNode=nil then
begin
Result:='';
Exit;
end;
end;
if XML_DataNode.HasAttribute(Str_AttrName) then
begin
Result:=XML_DataNode.Attributes[Str_AttrName];
end else
begin
Result:=XML_DataNode.Text;
end;
finally
XML_Doc.Free;
end;
end;
在DELPHI7中 16路甚至更多的线程频繁调用GetXMLData这个函数,经常报错,单步追踪到XML_Doc这个对象还没执行到XML_Doc.Free这里XML_Doc就变成nil了,实在想不明白为什么会这样子
全部回答
- 1楼网友:渡鹤影
- 2021-02-26 08:18
你说呢...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯