Как использовать преобразования XSLT в файлах обмена данными Project XML

Стандарт XSLT определяет определение языка для преобразований данных XML. XSLT используется для преобразования XML-документов в XHTML-документы или в другие XML-документы. В этой статье показано, как использовать XSLT с файлами обмена XML-данными Microsoft Office Project 2007 для фильтрации и отображения сведений о проекте. (Содержание этой статьи было представлено Джессикой Бриттон( Jessica Britton), Microsoft Corporation.)

Примечание.

Сведения о сохранении проектов в виде файлов обмена данными XML см. в разделе Сохранение и открытие проектов в формате XML.

Таблица стилей XSLT — это XML-документ, состоящий из сочетания разметки XHTML, правил шаблонов XSLT и инструкций XPath, которые работают вместе.

  • Разметка XHTML определяет среду отображения, в которой представлены XML-данные.

  • Правила шаблонов XSLT предоставляют инструкции по преобразованию исходного XML-элемента определенным образом.

  • Инструкции XPath определяют определенные элементы в XML-документе.

Если XML-элемент соответствует шаблону XPath, вызывается связанное правило шаблона XSLT. Преобразованные данные затем отрисовывается в платформе отображения, указанной в разметке XHTML.

Дополнительные сведения о правилах шаблонов XSLT и инструкциях XPath см. по ссылкам в конце этой статьи.

Отображение сведений о проекте с помощью преобразований XSLT

Процедура 1. Чтобы создать таблицу стилей XSLT, выполните приведенные далее действия.

  1. Создайте XSLT-файл для таблицы стилей. Если вы работаете в Microsoft Visual Studio 2005, можно использовать шаблон файла XSLT (в Visual Studio щелкните Файл, наведите указатель мыши на пункт Создать, а затем — Файл. Этот шаблон предварительно заполнен XML-кодом, показанным в следующем примере. Если вы работаете в другом текстовом или XML-редакторе, скопируйте этот шаблон XML и вставьте его в 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. Удалите следующий комментарий к XML-коду. Здесь вы пишете код XSLT.

        <!--
            This is an XSLT template file. Fill in this area with the
            XSL elements that will transform your XML to XHTML.
        -->
    
  3. Создайте код XSLT. Код XSLT, показанный в этом примере, выполняет следующие действия:

    • Отображает текстовое значение дочернего элемента Name элемента Project в заголовке.

    • Проверяет дочерний элемент Summary каждого элемента Task, чтобы проверить, равно ли значение 0 (false).

    • Проверяет дочерний элемент Critical каждого элемента Task, чтобы узнать, равно ли значение 1 (true).

    • Отображает данные для критически важных задач, которые не являются сводных задач полужирным шрифтом.

    • Отображает данные для некритических задач, которые не являются суммарными задачами.

    • Сортирует сведения о ресурсе в алфавитном порядке по текстовому значению дочернего элемента Name каждого элемента Resource.

    • Проверяет дочерний элемент Overallocated каждого элемента Resource, чтобы узнать, равно ли значение 1 (true).

    • Отображает отсортированные данные ресурсов только для ресурсов в целом.

    <!-- 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. Сохраните файл как ProjectTransform.xslt.

После создания таблицы стилей XSLT необходимо связать с ним XML-файл Project, добавив инструкции по обработке. Процедура 2 показывает, как связать файл ProjectTransform.xslt, созданный в процедуре 1, с любым XML-файлом Project.

Процедура 2. Чтобы изменить XML-файл Project для использования таблицы стилей XSLT, выполните следующие действия:

  1. Откройте XML-файл проекта в Visual Studio или в другом текстовом или XML-редакторе.

  2. Вставьте следующую строку кода после объявления XML, которое является первой строкой в XML-файле Project.

    <?xml-stylesheet type="text/xsl" href="ProjectTransform.xslt"?>
    
  3. Удалите объявление пространства имен XML из элемента Project, который является корневым элементом XML-файла Project. Если не удалить объявление пространства имен, внедренное в элемент Project, инструкции XPath не смогут сопоставить элементы в XML-файле Project.

    После выполнения шагов 2 и 3 первые три строки XML-файла Project должны выглядеть так, как показано в следующем примере кода.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <?xml-stylesheet type="text/xsl" href=" ProjectTransform.xslt"?>
    <Project>
    
  4. Сохраните XML-файл Project.

    Примечание.

    Рекомендуется сохранить файл, используя имя файла, отличное от исходного имени XML-файла Project, так как изменения, внесенные на шаге 3, отсоединяют XML-файл Project от схемы обмена данными PROJECT XML.

  5. Просмотрите преобразованный XML-файл Project. Преобразование XSLT можно выполнить в Visual Studio, задав для свойства Таблица стилей XML-файла Проекта значение ProjectTransform.xslt, а затем выбрав Команду Показать выходные данные XSLT в меню XML .

    Вы также можете открыть XML-файл Project в Internet Explorer 7, Microsoft Office Word 2007 или любом другом приложении, поддерживающем XSLT.

На рисунке 1 показаны преобразованные выходные данные XML-файла Project в Word 2007. При открытии XML-файла Project по умолчанию отображается представление данных только данные . Чтобы просмотреть преобразованные выходные данные, необходимо выбрать представление данных ProjectTransform.xslt в области XML-документа .

Рис. 1. XML-файл преобразованного проекта

XML-файл преобразованного проекта

См. также