Как использовать преобразования 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, выполните приведенные далее действия.
Создайте 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>
Удалите следующий комментарий к XML-коду. Здесь вы пишете код XSLT.
<!-- This is an XSLT template file. Fill in this area with the XSL elements that will transform your XML to XHTML. -->
Создайте код 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>
Сохраните файл как ProjectTransform.xslt.
После создания таблицы стилей XSLT необходимо связать с ним XML-файл Project, добавив инструкции по обработке. Процедура 2 показывает, как связать файл ProjectTransform.xslt, созданный в процедуре 1, с любым XML-файлом Project.
Процедура 2. Чтобы изменить XML-файл Project для использования таблицы стилей XSLT, выполните следующие действия:
Откройте XML-файл проекта в Visual Studio или в другом текстовом или XML-редакторе.
Вставьте следующую строку кода после объявления XML, которое является первой строкой в XML-файле Project.
<?xml-stylesheet type="text/xsl" href="ProjectTransform.xslt"?>
Удалите объявление пространства имен 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>
Сохраните XML-файл Project.
Примечание.
Рекомендуется сохранить файл, используя имя файла, отличное от исходного имени XML-файла Project, так как изменения, внесенные на шаге 3, отсоединяют XML-файл Project от схемы обмена данными PROJECT XML.
Просмотрите преобразованный 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-файл преобразованного проекта