This article has been localized into Portuguese by the community.
Trabalhando com a classe XmlNode
No capítulo anterior, usamos a classe XmlDocument para analisar um arquivo XML. Uma nova classe foi introduzida no exemplo, o que é muito essencial para analisar XML com XmlDocument: A classe XmlNode. O XML é basicamente analisado em um XmlNode que é o elemento raiz e, em seguida, você pode acessar os elementos filho usando a propriedade ChildNodes. No entanto, a classe XmlNode também oferece acesso a muitas outras informações, por exemplo, o nome da tag, os atributos, o texto interno e o próprio XML. Este capítulo é uma breve descrição de alguns dos aspectos mais interessantes da classe XmlNode, que é importante saber porque a classe XmlNode é um conceito-chave ao analisar XML com a classe XmlDocument. Nos exemplos a seguir, usaremos muito o DocumentElement e, embora na verdade seja do tipo XmlElement, XmlElement herdará de XmlNode, portanto, é essencialmente o mesmo.
A propriedade Name simplesmente fornecerá o nome do nó. Por exemplo, o exemplo a seguir produzirá o texto "usuário":
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<user name=\"John Doe\">A user node</user>");
Console.WriteLine(xmlDoc.DocumentElement.Name);
Console.ReadKey();
A propriedade InnerText conterá o texto contido nas tags inicial e final, assim:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<test>InnerText is here</test>");
Console.WriteLine(xmlDoc.DocumentElement.InnerText);
Console.ReadKey();
A propriedade InnerXml se parece um pouco com a propriedade InnerText, mas enquanto InnerText removerá qualquer código XML, a propriedade InnerXml obviamente não. O exemplo a seguir ilustra a diferença:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<users><user>InnerText/InnerXml is here</user></users>");
Console.WriteLine("InnerXml: " + xmlDoc.DocumentElement.InnerXml);
Console.WriteLine("InnerText: " + xmlDoc.DocumentElement.InnerText);
Console.ReadKey();
A propriedade OuterXml é igual à InnerXml, mas também incluirá o XML do próprio nó. O exemplo a seguir deve ilustrar a diferença:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<users><user>InnerText/InnerXml is here</user></users>");
Console.WriteLine("InnerXml: " + xmlDoc.DocumentElement.InnerXml);
Console.WriteLine("OuterXml: " + xmlDoc.DocumentElement.OuterXml);
Console.ReadKey();
Trabalhamos com atributos no capítulo anterior, mas aqui está outro exemplo:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<user name=\"John Doe\" age=\"42\"></user>");
if(xmlDoc.DocumentElement.Attributes["name"] != null)
Console.WriteLine(xmlDoc.DocumentElement.Attributes["name"].Value);
if(xmlDoc.DocumentElement.Attributes["age"] != null)
Console.WriteLine(xmlDoc.DocumentElement.Attributes["age"].Value);
Console.ReadKey();