none
Desenhar página a partir de um XML

    Pergunta

  • Olá, galera.

    Por acaso alguém conhece algo sobre desenhar páginas a partir do XML? Digo, o que eu preciso fazer é o seguinte: eu crio um XML, e nele estarão declarados todos os controles e eventos(sendo que o comportamento dos eventos serão métodos no .cs) da página. Porém, não há muito conteúdo sobre isso na internet. O único que encontrei até agora foi este: http://www.codeproject.com/KB/XML/xmlxsltransformer.aspx. Mas há um detalhe, neste exemplo, eu não consigo "criar" uma página, eu consigo somente "sobrescrever", e é mais ou menos aí que mora o meu problema. Eu gostaria de saber se existe a possibilidade de "criar" uma página a partir do XML. Eu, literalmente, preciso fazer um gerador de páginas a partir do XML.

    P.S.: Estou fazendo inicialmente com WebPages, porém vou ter que fazer o mesmo ainda para aplicações mobile.
    sexta-feira, 26 de março de 2010 15:07

Todas as Respostas

  • Boa Tarde, Rafael

    Eu trabalhei em algo parecido a um tempo atrás , você pode trabalhar com XSLT. Veja um exemplo de código.

    Crie um aquivo apresentacao.xsl

     

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body bgcolor="black">
    
    <!--Div com scroll das noticias-->
    <div style="width:350px;height:100px;overflow: auto; background-color: #000000;
                    font-family: Arial, Helvetica, sans-serif;font-size: 12px; " >  
                    
    <!--Tabela principal de noticias a linha-->
    <table width="324">
    
    <xsl:for-each select="noticias/noticia">
    
     <tr>
          <td>                  
              <!--Tabela intermediaria de noticias conteúdo -->
              <table width="327" height="116" cellpadding="1" cellspacing="1" bgcolor="#004F00">
              <tr>
                <!-- Imagem -->
                                                   <td width="116" rowspan="2" align="center" valign="middle">
                                                   <xsl:value-of select="imagem"/>
                                                   </td>
                                                   <!-- Notícia -->
                <td width="209" height="95" valign="top"><span ><span style="color: #FFFFFF;font-weight: bold;" ><xsl:value-of select="data"/> -</span> <A href="/ler_materia.asp?cod_materia=6177" style="color: #FFFF00;
                    text-decoration: none;" ><xsl:value-of select="texto"/></A></span></td>
              </tr>
              <tr>
                <td align="right"><a href="#" style="color: #FFFF00;text-decoration: none;">leia mais</a> </td>
              </tr>
          </table></td>
        </tr>    
    </xsl:for-each>
    
    </table>
    
    
    </div>
    
    
    </body>
    </html>
    
    </xsl:template>
    </xsl:stylesheet>

     Agora crie um aquivo XML

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="apresentacao.xsl"?>
    
    <noticias>
    	<noticia>
    	<imagem>teste.jpg</imagem>
    	<data>05/01/2010</data>
    	<texto>Teste de texto</texto>
    	</noticia>
    	<noticia>
    	<imagem>teste2.jpg</imagem>
    	<data>06/01/2010</data>
    	<texto>Teste de texto2</texto>
    	</noticia>
    	<noticia>
    	<imagem>teste3.jpg</imagem>
    	<data>07/01/2010</data>
    	<texto>Teste de texto3</texto>
    	</noticia>
    </noticias>

     ref. http://www.w3schools.com/xsl/default.asp


    Américo Arvani MCP/MCTS - WEB Se ajudou , marque como resposta.
    • Sugerido como Resposta Américo Arvani sexta-feira, 26 de março de 2010 17:21
    sexta-feira, 26 de março de 2010 17:20
  • Olá, Américo, tudo bem?

    Bem, o exemplo que tu está me mostrando é muito semelhante ao do link que postei anteriomente. Só que o problema ainda persiste, porque neste caso, sempre é necessário criar uma página que será, como eu já havia dito antes, "sobrescrita" e não "criada" a partir do XML. Não sei se há a possibilidade de fazer o que eu quero, mas é por este motivo que estou recorrendo aos meus colegas de fórum.

    Uma coisa que eu gostaria de lembrar aqui é que uma vez já trabalhei em um projeto em Java que funcionava mais ou menos desta forma. Eu só estou tentando usar a mesma idéia deste projeto, só que em .NET. Neste projeto, na classe principal (main) ele invocava a classe que "desenhava" a página, e assim por diante. Mas no ASP.NET, eu reparei que a estrutura do projeto .NET não permite que a criação da página seja substituída, somente pode ser criada e depois pode-se formatá-la assim como desejamos.

    Basicamente, como eu havia dito, eu quero criar um gerador de páginas.

    Caso, não seja possível fazer o que eu preciso, eu gostaria de pedir aos colegas uma pequena contribuição como seu conhecimento, me dizendo onde posso encontrar conteúdo para estudo desta matéria.

    Américo, onde encontro um conteúdo mais completo sobre o que tu me passou?

    Grato desde já.
    sexta-feira, 26 de março de 2010 18:31
  • Olha, nunca me deparei com essa necessidade sua , mas encontrei algo que pode de ajudar http://msdn.microsoft.com/en-us/library/18az815d(VS.71).aspx
    Américo Arvani MCP/MCTS - WEB Se ajudou , marque como resposta.
    sexta-feira, 26 de março de 2010 18:56
  • Olha... vc pode criar um WebForm em branco... e dar um override no metodo Render... e dentro dele vc pode redesenha a sua pagina a vontade :P

    da uma olhada nesse exemplo...

    http://msdn.microsoft.com/en-us/library/aa338806%28VS.71%29.aspx


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    sábado, 27 de março de 2010 01:14
  • Você pode criar programaticamente o XSL também e depois acrecentar o XML .

    Por exemplo:

    FileInfo f = new FileInfo("myxsl.xsl");
    StreamWriter w = f.CreateText(); 
    
    w.WriteLine("<xsl:stylesheet xmlns:xsl="+ (char)34+"http://www.w3.org/1999/XSL/Transform"+(char)34+" version="+(char)34+"1.0"+(char)34+">"); 
    
    w.WriteLine("<xsl:template match="+(char)34+"/"+(char)34+">"); 
    w.WriteLine("<HTML>"); 
    w.WriteLine("<HEAD>"); 
    w.WriteLine("<STYLE>"); 
    w.WriteLine(".HDR { background-color:bisque;font-weight:bold }"); 
    w.WriteLine("</STYLE>"); 
    w.WriteLine("</HEAD>"); 
    w.WriteLine("<BODY>");
    
    // you can also add tables etc 
    
    w.WriteLine("</BODY>"); 
    w.WriteLine("</HTML>"); 
    w.WriteLine("</xsl:template>"); 
    w.WriteLine("</xsl:stylesheet>"); 
    
    w.Close(); 

    Américo Arvani MCP/MCTS - WEB Se ajudou , marque como resposta.
    segunda-feira, 29 de março de 2010 12:26