delphi重复读取xml内容

zhongqian1_6 2010-11-22 09:07:48
procedure GetInfoFromXML(dXml: IXMLDocument; var code, mess,rw,title,path: string);
var
Root, Return_Node, Child_Node,sun,sunzi,sunjie: IXMLNode;
i,j:Integer;
taskrw,tasktitle,taskadd:array[0..7] of string;
begin
Root := dXML.DocumentElement;
Return_Node := Root.ChildNodes.First;
Child_Node := Return_Node.ChildNodes.First;
while (Child_Node <> nil) do
begin
if (Child_Node.NodeName = 'ReturnCode') then
begin
code := Child_Node.NodeValue;
end
else if (Child_Node.NodeName = 'ReturnMess') then
begin
mess := Child_Node.NodeValue;
end
else if(Child_Node.NodeName = 'Tasks') then
begin
sunjie := Child_Node.ChildNodes.First;
sunzi := sunjie.ChildNodes.First;

while (sunjie<>nil) do
begin
if (sunjie.NodeName = 'Task') then
begin
if (sunzi.NodeName = 'TaskCode') then
begin
rw := sunzi.NodeValue;
end
else if(sunzi.NodeName = 'TaskTitle') then
begin
title := sunzi.NodeValue;
end
else if(sunzi.NodeName = 'TaskUrl') then
begin
path := sunzi.NodeValue;
end;
sunzi := sunzi.NextSibling;
if sunzi = nil then
begin
taskrw[i] := rw;
tasktitle[i] := title;
taskadd[i] := path;
end;
end;
end;
sunjie := sunjie.NextSibling;
end;
Child_Node := Child_Node.NextSibling;

end;

end;

我这里为什么第二次读到TaskCode这个节点就出错啊?

文件原型是这样的
<Servicesreply>
<Service>
<ReturnCode>返回代码</ReturnCode>
<ReturnMess>返回信息</ReturnMess>
<Tasks> //仅当ReturnCode节点值为10000时存在
<Task>
<TaskCode>任务标识</TaskCode> //参见任务列表
<TaskTitle>任务说明</TaskTitle>
<TaskUrl>任务地址</TaskUrl>
</Task>
<Task>
<TaskCode>任务标识</TaskCode>
<TaskTitle>任务说明</TaskTitle>
<TaskUrl>任务地址</TaskUrl>

</Task>
…………
...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CassiaBlossom 2010-11-23
  • 打赏
  • 举报
回复
这个问题只是你自己写的代码有些问题,只是你自己不小心而已!
Versus1008 2010-11-23
  • 打赏
  • 举报
回复
用findnode 会比较好一些
ROOT := dXML.ChildNodes.FindNode('Servicesreply')
把ROOT定位到<Servicesreply>
再用ROOT一层层往下找
zhongqian1_6 2010-11-23
  • 打赏
  • 举报
回复
我找到了,,,哈哈哈,,,,谢谢你啊,,虽然我被你说一下烦躁了点不过还是自己解决啦,嘿嘿,,谢谢啊
bdmh 2010-11-23
  • 打赏
  • 举报
回复
你的循环中并没有执行sunjie := sunjie.NextSibling;当sunzi节点一直在NextSibling,这样就会造成访问出界
zhongqian1_6 2010-11-23
  • 打赏
  • 举报
回复
我跟踪了就是不明白啊,调了很久了,不然也不会来这里问了
zhongqian1_6 2010-11-23
  • 打赏
  • 举报
回复
我第一次用这个,所以不懂,以前都没做过呗,呵呵,,谢谢啊
bdmh 2010-11-23
  • 打赏
  • 举报
回复
这个东西,自己跟踪一下就清楚了,先自己琢磨琢磨,别有点问题就来问,你这就是个挺简单的错误
likeyrain 2010-11-23
  • 打赏
  • 举报
回复
哈哈,那我来接点分

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧