TOC

This article has been localized into Portuguese by the community.

XML:

Lendo XML com a classe XmlDocument

Conforme descrito no capítulo anterior, o XmlDocument consome mais memória e possivelmente é um pouco mais lento que a abordagem XmlReader. No entanto, para muitos propósitos, o XmlDocument pode ser mais fácil de trabalhar e geralmente requer menos código. Depois que o conteúdo XML for lido, você poderá ler os dados de forma hierárquica, da mesma forma que a estrutura XML, com um elemento raiz que pode ter elementos filho, que podem ter elementos filho e assim por diante. No capítulo anterior, analisamos dados XML do Banco Central Europeu que poderiam nos informar sobre as taxas de câmbio atuais, e faremos o mesmo agora, mas usando a classe XmlDocument.

O XML pode ser encontrado na URL atual ( http://www.ecb.int/stats/eurofxref/ eurofxref-daily.xml ) e os dados que precisamos estão nos elementos . Em uma estrutura de árvore, parece algo assim:

<gesmes:Envelope>
    [other child nodes]
    <Cube>
<Cube time="2011-04-12">
    <Cube currency="USD" rate="1.4470"/>
    <Cube currency="JPY" rate="121.87"/>
    …

O gesmes: Envelope é o nosso elemento-raiz, que podemos acessar usando a propriedade DocumentElement. Em seguida, poderemos acessar os filhos desse nó usando a propriedade de coleção ChildNodes. Em nosso exemplo, queremos que os nós filhos tenham três níveis abaixo do elemento raiz/documento. Podemos fazer isso usando o código a seguir, que essencialmente faz o mesmo que o código baseado em XmlReader no capítulo anterior:

using System;
using System.Text;
using System.Xml;

namespace ParsingXml
{
    class Program
    {
static void Main(string[] args)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
    foreach(XmlNode xmlNode in xmlDoc.DocumentElement.ChildNodes[2].ChildNodes[0].ChildNodes)
Console.WriteLine(xmlNode.Attributes["currency"].Value + ": " + xmlNode.Attributes["rate"].Value);
    Console.ReadKey();
}
    }
}

Como você pode ver, acessamos os nós Cube descendo a hierarquia ChildNodes. A partir do DocumentElement (o elemento-raiz), solicitamos o terceiro nó filho (baseado em índice zero), depois pedimos o primeiro nó filho dele e, em seguida, solicitamos a coleção inteira de nós filhos. Obviamente, isso só é possível porque sabemos a estrutura do documento XML, e definitivamente não é muito flexível, bonito ou fácil de alterar mais tarde. No entanto, a maneira como você navega em um documento XML depende muito da fonte XML e dos dados de que você precisa. Para este exemplo, o acima irá funcionar muito bem e mesmo com uma quantidade muito limitada de código, mas para outros fins, você pode querer usar um pouco mais de código para aumentar a legibilidade.

Uma vez que temos um nó com uma taxa de câmbio, acessamos as duas propriedades em que nos inserimos e então as enviamos para o console, assim como no exemplo do capítulo anterior.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!