Os dados XML podem ser convertidos em HTML usando uma folha de estilo XSL simples. À medida que a especificação XML continua a evoluir, parece necessário satisfazer as necessidades de todos em novas versões, infelizmente, fazer transformações simples sempre atrapalhou a especificação;
Suponha que eu tenha dados XML que representam o conteúdo de uma página e agora desejo converter seu conteúdo em um layout. Aqui está o XML que desejo converter:
Este conteúdo representa um conjunto de pastas, arquivos e campos. Cada pasta contém arquivos e cada arquivo contém campos para inserção de dados. Cada pasta no grupo de pastas será representada por um elemento TR e um elemento TD na primeira linha de uma TABLE. Cada arquivo no grupo de arquivos será representado como um elemento TR e um elemento TD na primeira linha de um elemento TABLE aninhado no elemento TR da pasta. Cada domínio no grupo de domínios aparecerá como um INPUT no arquivo associado.
Para implementar esta ideia, precisamos percorrer o XML e construir uma tabela baseada no XSL.
Aqui está o XSL usado para esta transformação:
xmlns:msxsl="urna:schemas-microsoft-com:xslt"
xmlns:fn=" http://www.mycompany.com/mynamespace ">
function getElementCount(nodelist, o que) {
varrtrn = 0;
rtrn = nodelist[0].parentNode.selectNodes(what).length;
return (rtrn + 1); //1 é adicionado para o preenchimento TD
}
Na tag de folha de estilo, configuramos vários namespaces, incluindo o namespace xsl que define todas as tags de transformação xsl. msxml que nos permite criar funções de usuário que podem ser usadas em folhas de estilo. Eu uso isso para obter todos os elementos filhos a fim de obter um conjunto de atributos COLSPAN para uma tag TD. O namespace fn usado para ingressar em um conjunto de funções definidas pelo usuário criadas pelo elemento msxml:script.
Em seguida, criamos a TABLE externa e o primeiro TR. No TR, crio um TD para cada pasta especificada no XML. Usei a tag xsl:element porque ela me permite adicionar atributos customizados ou executar uma função para definir uma propriedade para o atributo COLSPAN em outro elemento TD.
Após criar o TD necessário para cada pasta, comecei a criar o TR para cada pasta. Eu adiciono apenas um TD a este TR, mas defino seu atributo COLSPAN igual ao número de tags de pasta no grupo de pastas mais um. O extra é usado para preencher espaços em uma TABELA de layout fixo.
Para obter COLSPAN, passo o contexto atual (especificado aqui por ".") e o nome do nó que desejo calcular. Na minha função, obtenho o contexto atual, paraentNode, e o número de nós especificados na consulta XPath. A função então retorna esse valor mais um para preencher o TD.
Com este TD, incorporei nele outro TABLE que contém cada arquivo do grupo de arquivos. Deste ponto em diante, o processo é o mesmo de uma conversão externa de TABLE. A etapa final é adicionar os campos em cada arquivo. Desta vez não criei uma TABLE embutida, apenas adicionei os campos ao TD atual.
Depois de concluir o layout geral, posso começar a adicionar recursos de interface do usuário, como ocultar outras pastas e linhas de arquivos até que o usuário clique na guia relevante. Essa funcionalidade pode ser obtida escrevendo um script que suporte essa funcionalidade, adicionando um elemento onclick xsl:attribute aos elementos TD de pasta e arquivo e, em seguida, definindo seu valor como o nome da função de script.
Finalmente, após a conclusão da funcionalidade comum, você pode adicionar a classe xsl:attributes e adicionar os classNames relevantes em STYLE ou CSS para obter a aparência desejada.
Este exemplo cria uma base para a visualização Arquivo-Pasta-Campo usada na implantação de soluções de dados da Web. Visite o MSDN para saber mais sobre a especificação XML da Microsoft.