Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 лаба / lab1

.docx
Скачиваний:
0
Добавлен:
08.04.2023
Размер:
191.28 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра ВТ

ОТЧЕТ

по лабораторной работе №1

по дисциплине «Распределенные системы»

Тема: ПРИМЕНЕНИЕ ТЕХНОЛОГИЙ XML/XSLT ДЛЯ ОФОРМЛЕНИЯ HTML-СТРАНИЦ

Студенты гр.

Преподаватель

Бекенева Я.А..

Санкт-Петербург

2023

Задание

Построить XSLT-преобразования, осуществляющие преобразование исходных xml-документов в html-документы согласно заданиям 1 - 7. Убедится в том, что сгенерированные html-документы корректно отображаются браузером.

Ход работы

Структура проекта представлена на рис. 1

Рисунок 1. Структура проекта

Задание 1. Применить указанный цвет к надписи «название книги»

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<library>

<book>Название книги</book>

<color>red</color>

</library>

<font>

<xsl:attribute name="color"><xsl:value-of select="color"/></xsl:attribute>

<xsl:value-of select="book"/>

</font>

<font color="red">Название книги</font>

Рисунок 2. Результат выполнения преобразования

Задание 2. Выделить все элементы первого порядка (элементом нулевого порядка считать корневой элемент). Один абзац – один элемент.

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<root>

<XXX id="x1">

<BBB id="b1"/>

<BBB id="b2"/>

</XXX>

<AAA id="a2">

<BBB id="b3"/>

<BBB id="b4"/>

<CCC id="c1">

<DDD id="d1"/>

</CCC>

<BBB id="b5">

<CCC id="c2"/>

</BBB>

</AAA>

</root>

<xsl:for-each select="root/*">

<p><xsl:value-of select="name()"/> id=<xsl:value-of select="@id"/></p>

</xsl:for-each>

<p>XXX id=x1</p>

<p>AAA id=a2</p>

Тег <xsl:for-each select="root/*"> осуществляет перебор по всем потомкам узла root. Тег <xsl:value-of select="name()"/> вставляет значение имени текущего узла в виде текста. Тег <xsl:value-of select="@id"/> вставляет значение атрибута id в виде текста.

Рисунок 3. Результат выполнения преобразования

Задание 3. Вывести имена после id. Выделить id курсивом и жирным.

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<employees>

<employee id="js0034">

Joe Smith</employee>

<employee id="ma0012">

Marry Ann</employee>

</employees>

<xsl:for-each select="employees/employee">

<b><i><xsl:value-of select="@id"/></i></b>

<xsl:value-of select="."/>

<br/>

</xsl:for-each>

<b><i>js0034</i></b> Joe Smith

<b><i>ma0012</i></b> Marry Ann

Тег <xsl:value-of select="."/> вставляет значение текущего узла в виде текста.

Рисунок 4. Результат выполнения преобразования

Задание 4. Вывести таблицу, в которой указывается id родителя (если родителя нет, то ничего не выводить).

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<root>

<AAA id="a1">

<BBB id="b1"/>

<BBB id="b2"/>

</AAA>

<AAA id="a2">

<BBB id="b3"/>

<BBB id="b4"/>

<CCC id="c1">

<DDD id="d1"/>

</CCC>

<BBB id="b5">

<CCC id="c2"/>

</BBB>

</AAA>

</root>

<table border="1" cellpadding="6">

<tr><th colspan="2">Axis: child </th></tr>

<tr><th>Element</th> <th>Node-set</th></tr>

<!-- Пусть это будет вместо рекурсии -->

<xsl:for-each select="root/*">

<tr>

<td>

<xsl:value-of select="name()"/>

id=<xsl:value-of select="@id"/>

</td>

<td></td>

</tr>

<xsl:for-each select="./*">

<tr>

<td>

<xsl:value-of select="name()"/>

id=<xsl:value-of select="@id"/>

</td>

<td>

<xsl:value-of select="../@id"/>

</td>

</tr>

<xsl:for-each select="./*">

<tr>

<td>

<xsl:value-of select="name()"/>

id=<xsl:value-of select="@id"/>

</td>

<td>

<xsl:value-of select="../@id"/>

</td>

</tr>

</xsl:for-each>

</xsl:for-each>

</xsl:for-each>

</table>

<table border="1" cellpadding="6">

<tr><th colspan="2">Axis: child</th></tr>

<tr><th>Element</th><th>Node-set</th></tr>

<tr><td>AAA id = a1</td><td> </td></tr>

<tr><td>BBB id = b1</td><td>a1 </td></tr>

<tr><td>BBB id = b2</td><td>a1 </td></tr>

<tr><td>AAA id = a2</td><td> </td></tr>

<tr><td>BBB id = b3</td><td>a2 </td></tr>

<tr><td>BBB id = b4</td><td>a2 </td></tr>

<tr><td>CCC id = c1</td><td>a2 </td></tr>

<tr><td>CCC id = c2</td><td>c1 </td></tr>

<tr><td>BBB id = b5</td><td>a2 </td></tr>

<tr><td>CCC id = c3</td><td>b5 </td></tr>

</table>

Решено было сделать три цикла внутри друг друга, т.к. реализация рекурсии на этом языке очень сложна

Рисунок 5. Результат выполнения преобразования

Задание 5. Вывести id, относящиеся к BBB красным цветом, к CCC – синим цветом, к DDD – зелёным цветом.

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<root>

<AAA id="a1">

<BBB id="b1"/>

<BBB id="b2"/>

</AAA>

<AAA id="a2">

<BBB id="b3"/>

<BBB id="b4"/>

<CCC id="c1">

<DDD id="d1"/>

</CCC>

<BBB id="b5">

<CCC id="c2"/>

</BBB>

</AAA>

</root>

<font color="red">

<xsl:for-each select="//BBB"> <!-- Любое кол-во промежуточных узлов -->

<xsl:value-of select="name()" />

id=<xsl:value-of select="./@id" />

<xsl:text> </xsl:text>

</xsl:for-each>

</font>

<font color="blue">

<xsl:for-each select="//CCC">

<xsl:value-of select="name()" />

id=<xsl:value-of select="./@id" />

<xsl:text> </xsl:text>

</xsl:for-each>

</font>

<font color="green">

<xsl:for-each select="//DDD">

<xsl:value-of select="name()" />

id=<xsl:value-of select="./@id" />

<xsl:text> </xsl:text>

</xsl:for-each>

</font>

<font color="red">BBB id=b1</font>

<font color="red">BBB id=b2</font>

<font color="red">BBB id=b3</font>

<font color="red">BBB id=b4</font>

<font color="red">BBB id=b5</font>

<font color="blue">CCC id=c1</font>

<font color="green">DDD id=d1</font>

Тег <xsl:for-each select="//BBB"> осуществляет перебор по любому количеству промежуточных узлов в поисках тех, которые называются ВВВ.

Рисунок 6. Результат выполнения преобразования

Задание 6. Раскрасить название цвета в соответствующий цвет.

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<root>

<color>blue</color>

<color>navy</color>

<color>yellow</color>

<color>green</color>

<color>lime</color>

<color>red</color>

</root>

<xsl:for-each select="root/*">

<table>

<tr>

<td style="color:{.}">

<xsl:value-of select="."/>

</td>

</tr>

</table>

</xsl:for-each>

<TABLE><TR><TD style="color:blue">blue </TD></TR></TABLE>

<TABLE><TR><TD style="color:navy">navy </TD></TR></TABLE>

<TABLE><TR><TD style="color:yellow">yellow </TD></TR></TABLE>

<TABLE><TR><TD style="color:green">green </TD></TR></TABLE>

<TABLE><TR><TD style="color:lime">lime </TD></TR></TABLE>

<TABLE><TR><TD style="color:red">red </TD></TR></TABLE>

Тег <td style="color:{.}"> передает в качестве цвета то, что написано в текущем узле.

Рисунок 7. Результат выполнения преобразования

Задание 7. Добавить точку после последнего имени.

Исходник (XML)

Преобразование (XSLT)

Результат (HTML)

<list>

<entry name="A"/>

<entry name="B"/>

<entry name="C"/>

<entry name="D"/>

</list>

<p>

<xsl:for-each select="list/*">

<xsl:value-of select="@name"/>

<xsl:if test="position()!=last()">, </xsl:if>

</xsl:for-each>.

</p>

<p>A, B, C, D.</p>

Рисунок 8. Результат выполнения преобразования

Соседние файлы в папке 1 лаба