永发信息网

请教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了,实在想不明白为什么会这样子
全部回答
  • 1楼网友:渡鹤影
  • 2021-02-26 08:18
你说呢...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯