Ler XML

Delphi

16/04/2007

Pessoal estou tentando ler o arquivo abaixo em Delphi7.

<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
<channel>
<title>Tempo Agora (Previsão para 5 dias)</title>
<description>UOL Met</description>
<link>http://www.uol.com.br</link>
<lastBuildDate>Mon, 16 Apr 2007 4:50 08 -0300</lastBuildDate>
<generator>D-MAX Gerador RSS 1.0b</generator>
<item>
<title>Florianópolis-SC - Previsão do Tempo</title>
<link>http://www.uol.com.br</link>
<description>
<![CDATA[(<b>Segunda - 16/04</b>) - Min: 20º / Máx: 30º / Prec: 0mm / Situação: Poucas Nuvens<br />]]>
<![CDATA[(<b>Terça - 17/04</b>) - Min: 21º / Máx: 31º / Prec: 0mm / Situação: Poucas Nuvens<br />]]>
<![CDATA[(<b>Quarta - 18/04</b>) - Min: 21º / Máx: 31º / Prec: 0mm / Situação: Poucas Nuvens<br />]]>
<![CDATA[(<b>Quinta - 19/04</b>) - Min: 21º / Máx: 31º / Prec: 0mm / Situação: Poucas Nuvens<br />]]>
<![CDATA[(<b>Sexta - 20/04</b>) - Min: 21º / Máx: 31º / Prec: 0mm / Situação: Poucas Nuvens<br />]]>
</description>
<author>fonte: SOMAR Meteorologia</author>
<pubDate>Mon, 16 Apr 2007 4:50 08 -0300</pubDate>
<guid>http://www.uol.com.br</guid>
</item>
</channel>
</rss>


Na tag ´description´ tem vários ´CDATA´ porém só consigo ler o primeiro.

Meu código:

      StartItemNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode(´item´);
      ANode := StartItemNode;

      Qtde_Noticias := 100;
      i := 1;
      repeat
        NodeList := nil;
        No := nil;

        STitle := ANode.ChildNodes[´title´].Text;
        sLink := ANode.ChildNodes[´link´].Text;


        if ANode.ChildNodes[´description´].IsTextElement then
          sDesc := ANode.ChildNodes[´description´].Text
        else
        begin
          NodeList := ANode.ChildNodes;
          for k:= 0 to NodeList.Count -1  do
          begin
            No := NodeList.Get(0);
            while No  <> nil do
            begin
//Fica sempre no primeiro CDATA               
showMessage(FormatFloat(´00 ´, K)+No.ChildNodes[No.ChildNodes[´´].NodeName].Text);
               No := No.NextSibling;
            end;
          end;
        end;

       if i=Qtde_Noticias then break else inc(i);

        ANode := ANode.NextSibling;
      until ANode = nil;


Como faço isso?


Carlosib

Carlosib

Curtidas 0

Respostas

Paullsoftware

Paullsoftware

16/04/2007

Não costumo trabalhar com arquivos xml, mais já tentou usar um ClienteDataSet para fazer a leitura do arquivo?


GOSTEI 0
Carlosib

Carlosib

16/04/2007

É que queria saber como faço para ler com a classe TXMLDocument.

Consigo ler até aparecer a ´tag´ CDATA....


GOSTEI 0
Daniel Bernardo

Daniel Bernardo

16/04/2007

Bom dia!

Alguem conseguiu interpretar esse !CDATA com o XmlDocument?

com o clientdataset o !CDATA fica em branco.
GOSTEI 0
Daniel Bernardo

Daniel Bernardo

16/04/2007

Utilize

ChildNodes.FindNode(#cdata-section);

Abraço!
GOSTEI 0
POSTAR