Автор статьи: Головин Андрей
Теперь мы знаем, как получить значения элементов и атрибутов в XSLT-скрипте. Рассмотрим, какие еще возможности предоставлены разработчикам, использующим XSLT для преобразования XML.
Вы, скорее всего, уже обратили внимание на конструкцию (из предыдущего опыта):
<B><FONT color=navy><A></FONT>
<FONT color=navy><xsl:attribute <FONT color=green>name</FONT>=»<FONT color=red>HREF</FONT>»></FONT>
<FONT color=navy><xsl:value-of <FONT color=green>select</FONT>=»<FONT color=red>HOMEPAGE</FONT>» ></FONT>/<FONT
color <FONT=
color <FONT= color color=red>HOMEPAGE</FONT>» ><= FONT>/<FONT/color
Дело в=
том, что нам необходимо установить атрибут HREF элемента A из элемента HOMEPAGE в XML. Написать <SPAN class HREF select=HOMEPAGE >><= SPAN>=»»мы/не/можем. Такая конструкция имеет право на существование, например, при использовании скриптов PHP. Например можно написать так: <SPAN class HREF echo $homepage= ?>><= SPAN>, но в/XML такое невозможно. Так как любой элемент XML должен быть правильно сформирован, а здесь один XML-элемент является атрибутом дргого, что неправильно. Для того, чтобы задавать атрибуты XML-элементов (мы помним, что генерируемый в результате трансформации HTML-код является XML-кодом) используется инструкция <SPAN class В общем виде= он должен выглядеть так: <B><FONT color <FONT
color <FONT=
color color=red>ATTRIBUTE_NAME</FONT>»></FONT> Attribute value= <FONT=
color <FONT
color Данный=
XSLT-код задает=
значение атрибута <SPAN class равное <SPAN class=tag>Attribute value< SPAN>. Т.е.= результат/будет выглядеть так: <B><FONT color <FONT
color color=red>Attribute value< FONT>»><= FONT><FONT= color/Соответственно,/первый фрагмент=
кода сгенерирует конструкцию: <B><FONT color <FONT
color color=red>url</FONT>»></FONT>url<FONT color Значение= url= будет=
подставлено из элемента <SPAN class исходного XML-кода. Существуют= ситуации, когда
необходимо использовать тот или иной шаблон, в зависимости от значения элемента или атрибута. Для этого в XSLT используется инструкция <SPAN class test >< xsl:if><= SPAN>.=»»Например,/мы/можем проверить, установлено ли значение элемента HOMEPAGE таким кодом: <B><FONT color <FONT
color color=red>HOMEPAGE</FONT>»></FONT> домашняя страница:= <FONT=
color <FONT
color <FONT=
color color=red>HREF</FONT>»></FONT> <FONT color=navy><xsl:value-of <FONT=
color color=red>HOMEPAGE</FONT>» >< FONT>= <FONT= color/<FONT/color
<FONT color=green>select</FONT>=»<FONT
color ><= FONT> <FONT= color=navy></A></FONT> <FONT/color/Более
сложные ветвления=
необходимо реализовывать=
с помощью конструкции <SPAN class В общем случае выглядит она= так: <B><FONT color <FONT color <FONT
color color=red>условие</FONT>»></FONT>
шаблон <FONT= color <SPAN= style=COLOR: gray; FONT-STYLE: italic
><!—…—><
SPAN> <FONT=
color шаблон=»»<FONT/color
<FONT color=navy></xsl:choose></FONT></B>
Таким
образом мы=
можем переписать=
шаблон вывода адреса домашней странички таким образом, что, в случае отсутствия элемента HOMEPAGE будет выводиться соответствующее сообщение. <B><FONT color <FONT color <FONT
color color=red>HOMEPAGE</FONT>»></FONT>
домашняя страница:<FONT= color color=navy><xsl:attribute <FONT=
color color <FONT= color=navy><xsl:value-of <FONT color=green>select</FONT>=»<FONT color=red>HOMEPAGE</FONT>»
>< FONT>= <FONT color=navy></xsl:attribute></FONT><FONT color=navy><xsl:value-of <FONT/color/color
>< FONT><FONT= color=navy></A></FONT> <FONT color=navy></xsl:when></FONT> <FONT= color/Эти/тормоза еще=
не сподобились=
сделать себе=
страничку. <FONT color <FONT color Пример такого выбора
находится в=
файле =
>ent1.xsl, а данные для него в файле ent_xslt1.xml. Листинги здесь приводить не буду для экономии места.