De que se trata o artigo

Este artigo tem o objetivo de demonstrar, em termos gerais, como o recurso do .NET Framework denominado LINQ To XML pode ser utilizado em operações envolvendo a leitura e / ou escrita de informações no formato XML, empregando-se para isto a linguagem C#. Language Integrated Query (LINQ) é um recurso da plataforma .NET que permite, basicamente, a realização execução de consultas (queries) e outros tipos operações sobre agrupamentos de dados. Tais agrupamentos podem ser representados por coleções de objetos, entidades correspondentes a estruturas de dados de um banco SQL Server, documentos XML ou, ainda, Datasets obtidos através das classes de acesso a dados do ADO.NET. A extensão conhecida como LINQ to XML é utilizada na manipulação de dados no formato XML, disponibilizando uma série de recursos que simplificam a realização de operações de escrita e leitura.

Em que situação o tema é útil

A manipulação de dados em XML tende a ser uma tarefa trabalhosa, haja vista a necessidade de se efetuarem numerosas operações para o tratamento de informações dispostas em uma estrutura hierárquica. Em virtude disto, não é fato raro que funcionalidades destinadas à manipulação de XML sejam implementadas através de extensos trechos de código. Procurando oferecer uma alternativa que reduza a complexidade inerente a este tipo de processo, a plataforma .NET disponibiliza o mecanismo denominado LINQ to XML para a realização de operações sobre dados no formato XML.

LINQ to XML

O tratamento de dados no formato XML representa um tipo de atividade frequente no dia-a-dia de desenvolvedores de software. XML é um dos padrões mais empregados para o intercâmbio de informações atualmente, sendo ainda comum o seu uso sob a forma de arquivos de configurações ou, mesmo, na persistência de informações dispostas segundo algum grau de hierarquia. Importante ressaltar que existem, inclusive dentro do próprio .NET Framework, diversas técnicas para a manipulação de dados neste formato. No entanto, embora muitos dos mecanismos disponíveis para se tratar XML apresentem benefícios, os mesmos também acrescentam uma maior complexidade no desenvolvimento. LINQ to XML é uma tecnologia que visa facilitar a implementação de processos que envolvem a utilização de XML, disponibilizando para isto uma série de recursos para a realização de operações sobre dados hierárquicos.

O formato XML (sigla em inglês para Extensible Markup Language) é um padrão aberto para a geração de documentos hierárquicos, contando com uma ampla utilização por parte de aplicações computacionais dos mais variados tipos. Trata-se de uma especificação que também é fruto de trabalhos do W3C (simplificação em inglês de World Wide Web Consortium), tendo surgido ainda no final da década de 1990.

O uso de informações em XML se faz presente em situações como processos de integração entre soluções de softwares via Web Services, no conteúdo de sites da Internet, em softwares convencionais instalados em computadores, dentro de dispositivos móveis etc.

A larga aceitação de XML se deve, entre outros fatores, à simplicidade deste formato e aos esforços para com a padronização desta linguagem. Contribui em muito para isto, ainda, o total suporte oferecido a este padrão pelas principais linguagens de programação e sistemas operacionais. Levando tais fatos em consideração, numerosas técnicas para a manipulação de dados em XML foram concebidas.

Um exemplo disto é o mecanismo conhecido DOM (Document Object Model). Trata-se de uma convenção composta por um conjunto de regras que possibilitam, por sua vez, a navegação pela hierarquia de um documento XML: isso acontece, normalmente, sob a forma de uma estrutura que se assemelha a uma "árvore", com objetos dependendo uns dos outros e estando dispostos em vários níveis. Muitas plataformas de desenvolvimento contam com bibliotecas compatíveis com o padrão DOM, incluindo-se também nisto o .NET Framework.

Contudo, manipular informações em XML por meio de DOM tende a ser, muitas vezes, uma tarefa trabalhosa, podendo resultar extensos trechos de código ao longo de uma solução de software.

Na edição anterior iniciou-se a discussão sobre LINQ, com isto sendo feito por meio da demonstração de como consultas poderiam ser efetuadas sobre coleções de objetos (LINQ to Objects). Neste novo artigo será explicado como a manipulação de informações no formato XML pode ser simplificada com LINQ, empregando-se neste caso o recurso conhecido como LINQ to XML.

A fim de se cumprir com este objetivo, serão demonstrados exemplos de como se proceder com a leitura e a escrita de informações em XML. Serão utilizadas, assim, algumas das classes que LINQ disponibiliza para atividades deste gênero, bem como discutidos conceitos relacionados a tais práticas.

Estrutura geral de um documento XML

Assim como a linguagem HTML (Hypertext Markup Language), XML é um formato baseado em marcações (tags). No entanto, diferentemente de HTML em que existe um conjunto padrão de tags, XML é na verdade uma metalinguagem, ou seja, um conjunto de regras para a criação de uma nova linguagem: não existem tags pré-definidas, com as marcações sendo estipuladas conforme uma demanda específica.

Documentos em XML são formados por um conjunto de elementos (nodes), sendo que as relações de dependência entre estes últimos se estabelecem por meio de níveis de hierarquia. Um elemento, por sua vez, é constituído por uma tag e seu respectivo conteúdo. Quanto ao conteúdo, um elemento pode estar vazio, possuir atributos ou, mesmo, conter um agrupamento de outros elementos. Já um atributo é formado por um par constituído por um nome e um valor correspondente (com este último entre aspas), sendo que estes dois itens encontram-se separados por um sinal de “=” (“igual”).

Na Listagem 1 encontra-se um exemplo simples de um documento XML contendo algumas informações sobre países.

Listagem 1. Exemplo de documento XML


  <?xml version="1.0" encoding="utf-8">
  <Continentes>
    <Continente>
      <Nome>Europa</Nome>
      <Paises>
        <Pais Sigla="ALE">
          <Nome>Alemanha</Nome>
          <Capital>Berlim</Capital>
        </Pais>
        <Pais Sigla="ING">
          <Nome>Inglaterra</Nome>
          <Capital>Londres</Capital>
        </Pais>
      </Paises>
    </Continente>
  </Continentes>

A primeira linha contida no documento de exemplo é uma declaração que estará presente em qualquer documento XML. Dentro da mesma podem ser notados os seguintes atributos:

• version: indica qual versão padrão da especificação XML está sendo empregada (no exemplo está sendo empregada a versão 1.0);

• encoding: define o conjunto padrão de caracteres adotado para o documento XML (neste caso, UTF-8).

Nota do DevMan

Encodings são especificações que definem um conjunto de caracteres capazes de serem suportados. Exemplos disto são padrões como o ASCII, UTF-8, UTF-16 e UTF-32. O UTF-8 (sigla em inglês para 8-bit Unicode Transformation Format) é um tipo de codificação que engloba uma larga faixa de caracteres, fazendo uso para isto de 1 a 4 conjuntos de 8 bits (octeto) para a representação de símbolos.

As diversas tags (Continentes, Continente, Países, Pais, Nome e Capital) definidas ao longo do documento XML representam os elementos que formam o mesmo. Considerando o exemplo fornecido, é possível que um elemento possua elementos-filho (caso de Continentes, Continente, Países e Pais) ou, mesmo, que apresente apenas texto em seu conteúdo (tags Nome e Capital). Além disso, está sendo demonstrado ainda como se empregam atributos (Sigla) dentro da tag que define um elemento (Pais).

...
Quer ler esse conteúdo completo? Tenha acesso completo