Como: Usar Transformações XSLT com Arquivos de Intercâmbio de Dados XML do Project

O padrão XSLT (Extensible Stylesheet Language Transformation) especifica uma definição de idioma para transformações de dados XML. O XSLT é usado para transformar documentos XML em documentos XHTML ou em outros documentos XML. Este artigo mostra como usar o XSLT com arquivos do Microsoft Office Project 2007 XML Data Interchange para filtrar e exibir informações do projeto. (O conteúdo deste artigo foi contribuído por Jessica Britton, Microsoft Corporation.)

Observação

Para obter informações sobre como salvar projetos como arquivos do Project XML Data Interchange, consulte Salvar e abrir projetos no formato XML.

Uma planilha de estilos XSLT é um documento XML que consiste em uma combinação de marcação XHTML, regras de modelo XSLT e instruções XPath que funcionam juntas.

  • A marcação XHTML define o ambiente de exibição no qual os dados XML são apresentados.

  • As regras de modelo XSLT fornecem instruções para transformar um elemento XML de origem de uma maneira específica.

  • As instruções XPath identificam elementos específicos em um documento XML.

Quando um elemento XML corresponde a um padrão XPath, a regra de modelo XSLT associada é invocada. Os dados transformados são renderizados na estrutura de exibição especificada pela marcação XHTML.

Para obter mais informações sobre regras de modelo XSLT e instruções XPath, confira os links no final deste artigo.

Exibindo informações do projeto usando transformações XSLT

Procedimento 1. Para criar uma planilha de estilos XSLT:

  1. Crie um arquivo XSLT para sua planilha de estilos. Se você estiver trabalhando no Microsoft Visual Studio 2005, poderá usar o modelo arquivo XSLT (no Visual Studio, clique em Arquivo, aponte para Novo e clique em Arquivo. Este modelo é prepovoado com o código XML mostrado no exemplo a seguir. Se você estiver trabalhando em outro texto ou editor XML, copie este modelo XML e cole-o no arquivo XSLT.

    <?xml version="1.0" encoding="utf-8"?>
    
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
        <html>
        <body>
        <!--
            This is an XSLT template file. Fill in this area with the
            XSL elements which will transform your XML to XHTML.
        -->
        </body>
        </html>
    </xsl:template>
    
    </xsl:stylesheet>
    
  2. Exclua o seguinte comentário de código XML. É aqui que você grava seu código XSLT.

        <!--
            This is an XSLT template file. Fill in this area with the
            XSL elements that will transform your XML to XHTML.
        -->
    
  3. Crie seu código XSLT. O código XSLT mostrado neste exemplo faz o seguinte:

    • Exibe o valor de texto do filho nome do elemento Project em um cabeçalho.

    • Testa o filho resumo de cada elemento Task para ver se o valor é 0 (false).

    • Testa o filho crítico de cada elemento Task para ver se o valor é 1 (true).

    • Exibe dados para tarefas críticas que não são tarefas de resumo em negrito.

    • Exibe dados para tarefas não críticas que não são tarefas de resumo.

    • Classifica as informações de recurso em ordem alfabética pelo valor de texto do filho nome de cada elemento Resource.

    • Testa o filho overallocated de cada elemento Resource para ver se o valor é 1 (true).

    • Exibe dados de recursos classificados apenas para recursos globalizados.

    <!-- Define a table to display data in. -->
          <table border="1" cellpadding="3">
            <tr>
              <td colspan="5" align="center">
                <!-- Filter for the project name and display it in a header.  -->
                <h2>
                  <font face="tahoma" size="5">
                    Status for: <xsl:value-of select="Project/Name" />
                  </font>
                </h2>
              </td>
            </tr>
            <!-- Define headers for task information. -->
            <tr>
              <td colspan="5" align="center">
                Tasks:
              </td>
            </tr>
            <tr>
              <th>
                <font color="black">ID</font>
              </th>
              <th>
                <font color="black">Name</font>
              </th>
              <th>
                <font color="black">Priority</font>
              </th>
              <th>
                <font color="black">Start</font>
              </th>
              <th>
                <font color="black">Finish</font>
              </th>
            </tr>
            <!-- Filter for tasks -->
            <xsl:for-each select="Project/Tasks/Task">
              <!-- Exclude summary tasks -->
              <xsl:if test="Summary[.=0]">
                <xsl:choose>
                  <!-- Display information for critical tasks with a colored background. -->
                  <xsl:when test="Critical[.=1]">
                    <tr>
                      <td>
                        <xsl:value-of select="ID"/>
                      </td>
                      <td>
                        <b>
                          <xsl:value-of select="Name"/>
                        </b>
                      </td>
                      <td>
                        <b>
                          <xsl:value-of select="Priority"/>
                        </b>
                      </td>
                      <td>
                        <b>
                          <xsl:value-of select="Start"/>
                        </b>
                      </td>
                      <td>
                        <b>
                          <xsl:value-of select="Finish"/>
                        </b>
                      </td>
                    </tr>
                  </xsl:when>
                  <!-- Display information for noncritical tasks with a white background. -->
                  <xsl:otherwise>
                    <tr>
                      <td>
                        <xsl:value-of select="ID"/>
                      </td>
                      <td>
                        <xsl:value-of select="Name"/>
                      </td>
                      <td>
                        <xsl:value-of select="Priority"/>
                      </td>
                      <td>
                        <xsl:value-of select="Start"/>
                      </td>
                      <td>
                        <xsl:value-of select="Finish"/>
                      </td>
                    </tr>
                  </xsl:otherwise>
                </xsl:choose>
              </xsl:if>
            </xsl:for-each>
            <!-- Define headers for overallocated resource information. -->
            <tr>
              <td colspan="5" align="center">
                Overallocated Resources:
              </td>
            </tr>
            <tr>
              <th>
                <font color="black">ID</font>
              </th>
              <th colspan="2">
                <font color="black">Name</font>
              </th>
              <th colspan="2">
                <font color="black">Overtime Rate</font>
              </th>
            </tr>
            <!-- Filter for resources -->
            <xsl:for-each select="Project/Resources/Resource">
              <!-- Sort resources alphabetically by name -->
              <xsl:sort select="Name" />
              <!-- Display information for only resources that are overallocated. -->
              <xsl:if test="OverAllocated[.=1]">
                <tr>
                  <td>
                    <xsl:value-of select="ID"/>
                  </td>
                  <td  colspan="2">
                    <xsl:value-of select="Name"/>
                  </td>
                  <td  colspan="2" align="center">
                    $<xsl:value-of select="OvertimeRate"/>.00
                  </td>
                </tr>
              </xsl:if>
            </xsl:for-each>
          </table>
    
  4. Salve o arquivo como ProjectTransform.xslt.

Depois de criar a folha de estilos XSLT, você deve vincular seu arquivo XML do Project a ele adicionando instruções de processamento. O procedimento 2 mostra como vincular o arquivo ProjectTransform.xslt criado no Procedimento 1 a qualquer arquivo do Project XML.

Procedimento 2. Para modificar o arquivo XML do Project para usar a folha de estilos XSLT:

  1. Abra um arquivo XML do Project no Visual Studio ou em outro texto ou editor XML.

  2. Insira a seguinte linha de código após a declaração XML, que é a primeira linha no arquivo XML do Projeto.

    <?xml-stylesheet type="text/xsl" href="ProjectTransform.xslt"?>
    
  3. Exclua a declaração de namespace XML de dentro do elemento Project, que é o elemento raiz do arquivo XML do Projeto. Se você não excluir a declaração de namespace inserida no elemento Project, as instruções XPath falharão em corresponder aos elementos no arquivo XML do Project.

    Depois de executar as Etapas 2 e 3, as três primeiras linhas do arquivo XML do Projeto devem se parecer com o exemplo de código a seguir.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <?xml-stylesheet type="text/xsl" href=" ProjectTransform.xslt"?>
    <Project>
    
  4. Salve o arquivo XML do Project.

    Observação

    Recomendamos que você salve o arquivo usando um nome de arquivo diferente do nome do arquivo XML original do Projeto, pois as alterações feitas na Etapa 3 desassociam o arquivo Project XML do Esquema de Intercâmbio de Dados do Project XML.

  5. Exibir o arquivo XML do Project transformado. Você pode executar a transformação XSLT no Visual Studio definindo a propriedade Stylesheet do arquivo Project XML como ProjectTransform.xslt e selecionando Mostrar Saída XSLT no menu XML .

    Você também pode abrir o arquivo Project XML no Internet Explorer 7, Microsoft Office Word 2007 ou qualquer outro aplicativo que dê suporte a XSLT.

A Figura 1 mostra a saída transformada de um arquivo XML do Project no Word 2007. Quando você abre o arquivo Project XML, por padrão, a exibição de dados somente dados é exibida. Para ver a saída transformada, você deve selecionar a exibição de dados ProjectTransform.xslt no painel Documento XML .

Figura 1. Transformed Project XML file

Transformed Project XML file

Confira também