|

楼主 |
发表于 2008-4-28 17:12:54
|
显示全部楼层
xml的问题
我在delphi中下列代码是可以用的,但是在平台上运行时出错,该如何改呢?(实现把xml读出写到数据库中)
procedure TForm1.xmlMsg2DB(xmlData:String);
var
xmlDoc:IXMLDocument;
rootNode,curNode:IXMLNode;
i:Integer;
s:String;
begin
////DataSet
if not ADODataSet1.Active then
begin
ADODataSet1.Open;
end;
xmlDoc:= TXMLDocument.Create(nil);
xmlDoc.Active:=true;
xmlDoc.Encoding :='GB2312';
xmlDoc.LoadFromXml(xmlData);//
rootNode:=xmlDoc.DocumentElement;// rootNode
curNode:=rootNode.ChildNodes.FindNode('alarmItem');
try
if curNode <> nil then
begin
ADODataSet1.Append; //因故障xml只有一条报警,故只须插入一次
for i :=0 to curNode.ChildNodes.Count -1 do
begin
s:=s+curNode.ChildNodes.NodeValue+',';
ADODataSet1.FieldByName(curNode.ChildNodes.NodeName).AsString:=curNode.ChildNodes.NodeValue;
end;
ADODataSet1.Post;
edtXmlData.Text:=s;
ADODataSet1.Refresh;
DBGrid1.Refresh;
end;
except
on e:exception do
showmessage('Xml-->DataBase Failed!'+e.Message);
end;
end;
////改在x3平台上用
procedure TBJJKGNTCPFS.xmlMsg2DB(xmlData:String);
var
xmlDoc:TXMLDocument;
rootNode,curNode:IXMLNode;
i:Integer;
s:String;
begin
////DataSet
if not dsb_Alarm.DataSet.Active then
begin
dsb_Alarm.DataSet.Open;
end;
//xmlDoc:= TXMLDocument.Create(nil);//delphi
xmlDoc:= TXMLDocument.Create(Self); //执行到这儿出错
xmlDoc.Active:=true;
xmlDoc.Encoding :='GB2312';
xmlDoc.LoadFromXml(xmlData);//
rootNode:=xmlDoc.DocumentElement;// rootNode
curNode:=rootNode.ChildNodes.FindNode('alarmItem');
try
if curNode <> nil then
begin
dsb_Alarm.DataSet.Append; //因故障xml只有一条报警,故只须插入一次
for i :=0 to curNode.ChildNodes.Count -1 do
begin
s:=s+curNode.ChildNodes.GetText+',';
dsb_Alarm.DataSet.FieldByName(curNode.ChildNodes.NodeName).AsString:=curNode.ChildNodes.GetText;
end;
dsb_Alarm.DataSet.Post;
edtXmlData.Text:=s;
dsb_Alarm.DataSet.Refresh;
DataGrid1.Refresh;
end;
except
on e:exception do
jsDialogs.ShowMsg(e.Message,'Xml-->DataBase Failed!');
end;
end;
在
|
|