用NextSibling操作XMLDocument的问题

fatminforever 2007-04-04 11:22:08
代码很简单,问题是,调用NextSibling时,总是需要调用两次才得到一个结点,中间一次Node是nil,是什么原因呢?

DefaultDOMVendor:= SOpenXML;
sXml := memo1.Lines.Text;
XMLDoc :=LoadXMLData(DOMString(sXml));
RootNode:=XMLDoc.ChildNodes.FindNode('Advertisements');
Node1:=RootNode.ChildNodes.FindNode('Ad');

if Node1<>nil then
begin
while Node1<>nil do
begin
Node2:=Node1.ChildNodes.FindNode('Keyword');
if Node2<>nil then
memo2.Lines.Add(Node2.Text)
else
memo2.Lines.Add('');
Node1 := Node1.NextSibling;
//必须在这里多调用一次
Node1 := Node1.NextSibling;
end;
end;

XML如下:
<?xml version="1.0" ?>
<!--xmlns="Ad Rotator Schedule" encoding="UTF-8" standalone="yes" ?-->

<Advertisements>
<Ad>
<ImageUrl>images/en-us/HDHD0016_LG.GIF</ImageUrl>
<TargetUrl >http://ads.msn.com/ads/house/HDHD0016_LG.GIF</TargetUrl >
<AlternateText>Check out Hotmail</AlternateText>
<Keyword>en-US</Keyword>
<Impressions>80</Impressions>
</Ad>
<Ad>
<ImageUrl>images/en-us/HDHD0012_LG.GIF</ImageUrl>
<TargetUrl >http://ads.msn.com/ads/house/HDHD0012_LG.GIF</TargetUrl >
<AlternateText>Check out Hotmail</AlternateText>
<Keyword>en</Keyword>
<Impressions>80</Impressions>
</Ad>

<Ad>
<ImageUrl>images/en-us/HDHD0014_LG.GIF</ImageUrl>
<TargetUrl >http://ads.msn.com/ads/house/HDHD0014_LG.GIF</TargetUrl >
<AlternateText>Check out Hotmail</AlternateText>
<Keyword>en</Keyword>
<Impressions>80</Impressions>
</Ad>

<Ad>
<ImageUrl>images/de/00292H30023_LG.gif</ImageUrl>
<TargetUrl >http://a252.g.akamai.net/f/252/482/24h/ads.msn.com/ads/HTMVAL/00292H30023_LG.gif</TargetUrl >
<AlternateText>Check out Hotmail</AlternateText>
<Keyword>de</Keyword>
<Impressions>80</Impressions>
</Ad>

</Advertisements>
...全文
159 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fatminforever 2007-04-04
  • 打赏
  • 举报
回复
没人知道么?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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