Compartir a través de


Cómo: usar transformaciones XSLT con archivos de intercambio de datos XML de Project

El estándar transformación de lenguaje de hoja de estilos extensible (XSLT) especifica una definición de lenguaje para transformaciones de datos XML. XSLT se usa para transformar documentos XML en documentos XHTML o en otros documentos XML. En este artículo se muestra cómo usar XSLT con archivos de intercambio de datos XML de Microsoft Office Project 2007 para filtrar y mostrar información del proyecto. (El contenido de este artículo fue aportado por Jessica Britton, Microsoft Corporation).

Nota:

Para obtener información sobre cómo guardar proyectos como archivos de intercambio de datos XML de Project, vea Guardar y abrir proyectos en formato XML.

Una hoja de estilos XSLT es un documento XML que consta de una combinación de marcado XHTML, reglas de plantilla XSLT e instrucciones XPath que funcionan conjuntamente.

  • El marcado XHTML define el entorno de presentación en el que se presentan los datos XML.

  • Las reglas de plantilla XSLT proporcionan instrucciones para transformar un elemento XML de origen de una manera determinada.

  • Las instrucciones XPath identifican elementos específicos dentro de un documento XML.

Cuando un elemento XML coincide con un patrón XPath, se invoca la regla de plantilla XSLT asociada. A continuación, los datos transformados se representan en el marco de presentación especificado por el marcado XHTML.

Para obtener más información sobre las reglas de plantilla XSLT y las instrucciones XPath, consulte los vínculos al final de este artículo.

Mostrar información del proyecto mediante transformaciones XSLT

Procedimiento 1. Para crear una hoja de estilos XSLT:

  1. Cree un archivo XSLT para la hoja de estilos. Si trabaja en Microsoft Visual Studio 2005, puede usar la plantilla Archivo XSLT (en Visual Studio, haga clic en Archivo, seleccione Nuevo y, a continuación, haga clic en Archivo. Esta plantilla se rellena previamente con el código XML que se muestra en el ejemplo siguiente. Si está trabajando en otro texto o editor XML, copie esta plantilla XML y péguela en el archivo 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. Elimine el siguiente comentario de código XML. Aquí es donde se escribe el 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. Cree el código XSLT. El código XSLT que se muestra en este ejemplo hace lo siguiente:

    • Muestra el valor de texto del elemento secundario Name del elemento Project en un encabezado.

    • Prueba el elemento secundario Summary de cada elemento Task para ver si el valor es 0 (false).

    • Prueba el elemento secundario Crítico de cada elemento Task para ver si el valor es 1 (true).

    • Muestra los datos de las tareas críticas que no son tareas de resumen en negrita.

    • Muestra los datos de las tareas no críticas que no son tareas de resumen.

    • Ordena alfabéticamente la información del recurso según el valor de texto del elemento secundario Name de cada elemento Resource.

    • Prueba el elemento secundario Sobreasignado de cada elemento Resource para ver si el valor es 1 (true).

    • Muestra los datos de recursos ordenados solo para los recursos sobreasignados.

    <!-- 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. Guarde el archivo como ProjectTransform.xslt.

Después de crear la hoja de estilos XSLT, debe vincular el archivo XML de Project a él agregando instrucciones de procesamiento. El procedimiento 2 muestra cómo vincular el archivo ProjectTransform.xslt creado en el procedimiento 1 a cualquier archivo XML de Project.

Procedimiento 2. Para modificar el archivo XML del proyecto para usar la hoja de estilos XSLT:

  1. Abra un archivo XML de Proyecto en Visual Studio o en otro editor de texto o XML.

  2. Inserte la siguiente línea de código después de la declaración XML, que es la primera línea del archivo XML de Project.

    <?xml-stylesheet type="text/xsl" href="ProjectTransform.xslt"?>
    
  3. Elimine la declaración de espacio de nombres XML desde dentro del elemento Project, que es el elemento raíz del archivo XML de Project. Si no elimina la declaración de espacio de nombres incrustada en el elemento Project, las instrucciones XPath no coincidirán con los elementos del archivo XML de Project.

    Después de realizar los pasos 2 y 3, las tres primeras líneas del archivo XML de Project deben tener un aspecto similar al siguiente ejemplo de código.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <?xml-stylesheet type="text/xsl" href=" ProjectTransform.xslt"?>
    <Project>
    
  4. Guarde el archivo XML del proyecto.

    Nota:

    Se recomienda guardar el archivo con un nombre de archivo diferente del nombre de archivo XML de Project original, ya que los cambios realizados en el paso 3 desasocian el archivo XML de Project del esquema de intercambio de datos XML de Project.

  5. Vea el archivo XML de Project transformado. Para realizar la transformación XSLT en Visual Studio, establezca la propiedad Hoja de estilos del archivo XML del proyecto en ProjectTransform.xslt y, a continuación, seleccione Mostrar salida XSLT en el menú XML .

    También puede abrir el archivo XML de Project en Internet Explorer 7, Microsoft Office Word 2007 o cualquier otra aplicación que admita XSLT.

En la figura 1 se muestra la salida transformada de un archivo XML de Project en Word 2007. Al abrir el archivo XML de Project, se muestra de forma predeterminada la vista Solo datos. Para ver la salida transformada, debe seleccionar la vista de datos ProjectTransform.xslt en el panel Documento XML .

Figura 1. Archivo XML de Project transformado

Archivo XML de Project transformado

Consulte también