DESENVOLVIMENTO DE SOFTWARE PARA INTERNET 1 quarta-feira, 7 de novembro de 12 XML COM ASP.NET E C# 2 quarta-feira, 7 de novembro de 12 XML COM ASP.NET E C# Para iniciar, é importante esclarecer que XML (eXtensible Markup Language) é uma linguagem de marcação extensiva, não tem tags fixas como a linguagem de marcação HTML. Você cria suas próprias tags para descrever informações. Essa linguagem pode ser usada como arquivo de configuração, para compartilhar informações, exibir informações em diversos formatos, etc. A XML é utilizada para armazenar informações de aplicações ASP.NET e também do próprio .NET Framework. Empresas como a amazon.com disponibilizam a desenvolvedores de aplicações o acesso à sua base de dados de produtos. A própria amazon.com gera o arquivo .xml, que pode ser acessado pelo usuário via XML web service ou RSS. Milhares de websites disponibilizam conteúdo no formato XML, com o padrão RSS. 3 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML As principais formas que ocorrem em um documento XML: •Elementos •Atributos •Entidades •Instruções de processamento •Comentários •Seções CDATA 4 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML ELEMENTOS: Os elementos (tags) são compostos de tags de início (<) e tags de fim (>) e podem conter texto ou outros elementos. Regras para criação de elementos: •Devem começar com uma letra ou um caractere sublinhado (_). •Não devem conter espaços em branco. •Não são permitidos espaços entre a barra e o nome do elemento. •Não podemos sobrepor elementos. •Todo documento XML deve conter um elemento-raiz. •Todo elemento deve ter um elemento de fechamento. •A XML diferencia letras minúsculas de letras maiúsculas. 5 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML ELEMENTOS: •Exemplo: <?xml version=”1.0” encoding=”ISO-8859-1”?> <letras> <letra>A</letra> <letra>B</letra> </letras> 6 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML ATRIBUTOS: Os atributos são informações anexadas aos elementos, cujo objetivo é agregar valor ao elemento. As regras de renomeação são as mesmas utilizadas pelos elementos. Um atributo tem o seguinte formato: À esquerda do sinal de igual “=”, colocamos o nome do atributo, e à direita, está o conteúdo entre aspas ou apóstrofos. Um elemento pode conter vários atributos. Exemplo: <preço moeda=”R$”>15,00</preço> 7 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML ENTIDADES: As entidades permitem inserir o conteúdo de um arquivo, referenciar uma imagem ou inserir caracteres especiais que, se inseridos diretamente, confundem o interpretador XML. Coloca-se o conteúdo de uma entidade em um documento XML usando antes do nome da entidade o símbolo “&” e um ponto e vírgula “;” após. Exemplo: & A XML tem cinco entidades embutidas: Referência de entidade < > & ' " Insere < > & ‘ “ 8 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML ENTIDADES: Inválido: <compositor>Gil & Caetano</compositor> Válido: <compositor>Gil & Caetano</compositor> 9 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML COMENTÁRIOS: Podemos inserir comentários em um documento XML com a finalidade de descrever o próprio documento XML, além de elementos, atributos, entidades etc. Exemplo: <?xml version=”1.0” encoding=”ISO-8859-1”?> <!--Isto é um comentário--> <letras> <letra>A</letra> <letra>B</letra> </letras> Não é permitido o uso da string “--” dentro de um comentário. 10 quarta-feira, 7 de novembro de 12 ESTRUTURA DE UM DOCUMENTO XML SEÇÕES CDATA: São blocos de texto isolados do interpretador XML. São delimitados por <![DATA[ e ]]>. O interpretador XML ignora todas as marcações em uma seção CDATA, exceto ]]>, o que significa que não podemos aninhar uma seção CDATA em outra seção CDATA. Exemplo: <?xml version=”1.0” encoding=”ISO-8859-1”?> <pedidos> <pedido> <item>Sapato preto</item> <descrição>Sapato de couro masculino</descrição> <preço moeda=”R$”>78,00</preço> <descrição><![CDATA[Pedido confirmado plo e-mail: <a href=”mailto:[email protected]”>]]> </descrição> </pedido> </pedidos> 11 quarta-feira, 7 de novembro de 12 XML DOCUMENT OBJECT MODEL (DOM) É uma representação na memória de um documento XML que permite a você ler, manipular ou modificar, de maneira programática, um documento XML. Um documento XML é uma árvore de nós, dos quais existem versões especializadas, como elementos, atributos, comentários, etc. O XmlNode é o objeto básico na árvore DOM, e a classe XmlDocument é a representação na memória do documento XML, implementando o nível 1 e 2 do DOM. Você pode criar um documento XML vazio usando uma instância da classe XmlDocument: XmlDocument doc = new XmlDocument(); Obs.: a classe XmlDocument pertence à namespace System.Xml 12 quarta-feira, 7 de novembro de 12 XML DOCUMENT OBJECT MODEL (DOM) Em seguida, carregá-lo com dados com os métodos Load e LoadXML ou por intermédio das classes derivadas da classe XmlReader. Exemplo: XmlDocument doc = new XmlDocument(); doc.Load(“http://www.sitexxx.net/livro/pedidos.xml”); Se o documento XML estiver no seu computador, utilize o caminho físico para o documento. Exemplo: XmlDocument doc = new XmlDocument(); doc.Load(@“c:\sistema\pedidos.xml”); 13 quarta-feira, 7 de novembro de 12 XML DOCUMENT OBJECT MODEL (DOM) O método LoadXml carrega partes de um documento XML a partir de uma string, bastante útil quando temos um documento XML que não precisa ser armazenado. Por exemplo: você pode gerar um documento XML a partir de dados provenientes de um banco de dados e carregá-lo com o método LoadXml: XmlDocument doc = new XmlDocument(); doc.LoadXml(“<pedido><item>Sapato preto</item></pedido>”); 14 quarta-feira, 7 de novembro de 12 HIERARQUIA DE UM ARQUIVO XML <?xml version=”1.0” encoding=”ISO-8859-1”?> Instrução de processamento <cadastro> Elemento Raiz Elem. filho de cadastro índice (0) <cliente> <nome>Emilio Parmegiani</nome> Elem. filho de cliente índice (0) <profissão>Professor</profissão> Elem. filho de cliente índice (1) </cliente> Elem. filho de cadastro índice (1) <cliente> <nome>Leonardo Assis</nome> Elem. filho de cliente índice (0) <profissão>Programador</profissão> Elem. filho de cliente índice (1) </cliente> </cadastro> 15 quarta-feira, 7 de novembro de 12 MÉTODOS PARA ACESSAR UM OBJETO DOM DocumentElement: acessar os elementos do documento XML. XmlDocument doc = new XmlDocument(); doc.Load(@“c:\sistema\pedidos.xml”); XmlElemento elem = doc.DocumentElement; 16 quarta-feira, 7 de novembro de 12 MÉTODOS PARA ACESSAR UM OBJETO DOM ChildNodes: acessar os elementos do documento XML. Extrair o conteúdo de todos os elementos nome e profissão: using System; using System.Xml; public partial class ChildNodes : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(@"c:\cadastro.xml"); XmlElement elem = doc.DocumentElement; for (int i = 0; i < elem.ChildNodes.Count; i++) { for (int a = 0; a < elem.ChildNodes.Item(i).ChildNodes.Count; a++) { Response.Write(elem.ChildNodes.Item(i).ChildNodes.Item(a).InnerText + "<br/>"); } } } } 17 quarta-feira, 7 de novembro de 12 MÉTODOS PARA ACESSAR UM OBJETO DOM FirstChild e LastChild: acessar o conteúdo do primeiro e do último elemento de um documento XML: using System; using System.Xml; public partial class FirstLastChild : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(@"C:\letras.xml"); XmlElement elem = doc.DocumentElement; if (elem.HasChildNodes) { Response.Write("FirstChild >> " + elem.FirstChild.InnerText + "<br>"); Response.Write("LastChild >> " + elem.LastChild.InnerText); } } } 18 quarta-feira, 7 de novembro de 12 MÉTODOS PARA ACESSAR UM OBJETO DOM NextSibling e PreviousSibling: retornar o próximo nó e o nó anterior: XmlNode node = doc.DocumentElement.FirstChild; Response.Write(“NextSibling >> ” + node.NextSibling.InnerText + “<br>”); ou XmlNode node = doc.DocumentElement.LastChild; Response.Write(“NextSibling >> ” + node.PreviousSibling.InnerText + “<br>”); 19 quarta-feira, 7 de novembro de 12 MÉTODOS PARA ACESSAR UM OBJETO DOM GetElementsByTagName: acessa um elemento específico e retorna o conteúdo de todos os elementos-filho: using System; using System.Xml; public partial class GetElementsByTagName : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(@"C:\Regioes.xml"); XmlNodeList nodelist = doc.GetElementsByTagName("capitais"); for (int i = 0; i < nodelist.Count; i++) { Response.Write(nodelist.Item(i).InnerText + "<br>"); } } } 20 quarta-feira, 7 de novembro de 12 MÉTODOS PARA ACESSAR UM OBJETO DOM GetAttribute: retorna o conteúdo e o nome dos atributos que o documento possui: using System; using System.Xml; public partial class GetNamedItem : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(@"C:\revistas.xml"); XmlNodeList no = doc.GetElementsByTagName("preço"); for (int i = 0; i < no.Count; i++) { Response.Write(no.Item(i).Attributes.GetNamedItem("moeda").Name + "="); Response.Write(no.Item(i).Attributes.GetNamedItem("moeda").InnerText + "<br>"); } } } 21 quarta-feira, 7 de novembro de 12 BIBLIOGRAFIA • • • Centro para Iniciantes Microsoft: http://msdn.microsoft.com/pt-br/beginner/default.aspx Como Programar com ASP.NET e C# - Alfredo Lotar - novatec Desenvolvendo para Web usando o Visual Studio 2008 - Ramon Durães - novatec 22 quarta-feira, 7 de novembro de 12 OBRIGADO PROF. EMILIO PARMEGIANI DOWNLOAD DO MATERIAL 23 quarta-feira, 7 de novembro de 12