This article has been localized into Portuguese by the community.
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
<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.