首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi操作XML解决思路

2012-03-19 
delphi操作XML本来XML 文件中的内容为下面:?xml version1.0 encodingGB2312 ?基础信息商品信息

delphi操作XML
本来XML 文件中的内容为下面:
<?xml version="1.0" encoding="GB2312" ?> 
 <基础信息>
 <商品信息>
  <商品编号>00001</商品编号> 
  <商品名称>成品</商品名称> 
  <助记码>CP</助记码> 
  <基本单位>5</基本单位> 
  <条码>123456</条码> 
  <预售价>0</预售价> 
  <最近进价>0</最近进价> 
  </商品信息>
 <往来单位>
  <单位编码>C001</单位编码> 
  <单位名称>一级单位</单位名称> 
  <助记码>YJDW</助记码> 
  <往来类别>两者皆是</往来类别> 
  </往来单位>
  </基础信息>
但是为了 传送方便,别人直接 把XML中内容用 String类型作为参数传过来;我读取这些字符并且 把这些字符转换成XML好方便读取里面的记录;
Function TWsGetSysMsg.UpLoadData(FileString:String):String;stdCall;
FileString 参数里面的类容就为上面(<?xml version="1.0" encoding="GB2312"?>
<基础信息><商品信息><商品编号>00001</商品编号> <商品名称>成品</商品名称> <助记码>CP</助记码> <基本单位>5<基本单位> <条码>123456</条码> <预售价>0</预售价> <最近进价>0</最近进价> </商品信息><往来单位><单位编码>C001</单位编码> <单位名称>一级单位</单位名称> <助记码>YJDW</助记码> <往来类别>两者皆是</往来类别> </往来单位></基础信息>)
var
  BaseData:TXMLDocument;
  Root,Parent_Node,Child_Node :IXmlNode;
begin
  try
  BaseData:=TXMLDocument.Create(nil);
  BaseData.FileName:=FIleName;
  BaseData.Active:=True;
  Root:=BaseData.DocumentElement;//在这里报地址错误
  Parent_Node := Root.ChildNodes.First;;//加载文件会在这里报NO ACTIVE Document
  while (Parent_Node<>nil) do //循环取多个商品信息
  begin
  if (Parent_Node.NodeName = '商品信息') then //判断是否为商品信息
  begin
  StringList.Add('//////商品信息///////');
  Child_Node := Parent_Node.ChildNodes.First;
  while (Child_Node<>nil) do //循环取商品信息的各个子各点
  begin
  if (Child_Node.NodeName = '商品编码') then //判断是否为商品编码结点
  StringList.Add('商品编码:'+Child_Node.Text) //取商品编码结点的值,取于name字段中
  else if (Child_Node.NodeName = '商品名称') then
  StringList.Add('商品名称:'+Child_Node.Text)
  else if (Child_Node.NodeName = '助记码') then
  StringList.Add('助记码:'+Child_Node.Text);
  Child_Node := Child_Node.NextSibling; //顺序取下一个商品信息的子结点信息
  end;
  end
  else  
  if (Parent_Node.NodeName = '往来单位') then //判断是否为往来单位
  begin
  StringList.Add('//////往来单位///////');
  Child_Node := Parent_Node.ChildNodes.First;
  while (Child_Node<>nil) do //循环取往来单位的各个子各点
  begin
  if (Child_Node.NodeName = '单位编码') then //判断是否为商品编码结点
  StringList.Add('单位编码:'+Child_Node.Text)
  else if (Child_Node.NodeName = '单位名称') then
  StringList.Add('单位名称:'+Child_Node.Text)
  else if (Child_Node.NodeName = '助记码') then
  StringList.Add('助记码:'+Child_Node.Text);
  Child_Node := Child_Node.NextSibling; //顺序取下一个往来单位的子结点信息
  end;
  end;
  Parent_Node := Parent_Node.NextSibling; //顺序取下一个基础信息的子节点
  end;
  finally
  BaseData.Free;


  StringList.Free;
  end;
  Result:=StringList.Text;
end;

上面问题如何解决,或者那位大虾给个 列子。读取字符内容(其类容为XML 格式),将字符类容转换成XML,能读取XML 记录

[解决办法]
BaseData:=TXMLDocument.Create(nil);
改为
BaseData:=TXMLDocument.Create(Application);

[解决办法]

探讨
楼上二憨正解,这是在有FORM 窗体的下将BaseData:=TXMLDocument.Create(nil);
改为
BaseData:=TXMLDocument.Create(Application) 和 BaseData:=TXMLDocument.Create(self) 都可以解决。
但是 我是在没有FORM 窗体中,只有unit单元写的,就只能写成BaseData:=TXMLDo……

热点排行