用NextSibling操作XMLDocument的问题
代码很简单,问题是,调用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>