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);
[解决办法]