Доступ к атрибутам XML
XSL трактует атрибут, принадлежащий элементу в XML-документе, как дочерний элемент. Однако для ссылки на атрибут в образце XSL вы должны предварить имя атрибута символом @, что указывает на то, что имя относится к атрибуту, а не к элементу.
Например, фильтр в следующем начальном теге выделяет все элементы BOOK с атрибутом InStock, имеющем значение "yes". Другими словами, он выбирает только книги, которые имеются в наличии:
<xsl:for-each select="INVENTORY/BOOK[@InStock='yes']">
Вы можете использовать XSL-элемент value-of для извлечения значений атрибута точно так же, как вы это делаете для извлечения текстового содержимого элемента. Например, следующий элемент value-of получает значение атрибута Born, принадлежащего элементу AUTHOR:
<xsl:value-of select="AUTHOR/@Born"/>
Таблица стилей, представленная в Листинге 10.8, демонстрирует технику доступа к атрибутам, принадлежащим элементам в XML-документе. Эта таблица стилей связана с XML-документом из Листинга 10.9 и отображает все имеющиеся в наличии книги из каталога.
Листинг 10.8. XslDemo06.xsl (html, txt)
Листинг 10.9. XslDemo06.xml (html, txt)
Каждый элемент BOOK в XML-документе содержит атрибут InStock, имеющий значение "yes" или "no", указывающий наличие или отсутствие книги в хранилище. Каждый элемент AUTHOR имеет атрибут Born, содержащий год рождения автора.
Вместо отображения значения атрибута InStock таблица стилей использует атрибут в условии фильтрации с целью избежать отображения элементов BOOK для книг, которых нет в наличии:
<xsl:for-each select="INVENTORY/BOOK[@InStock='yes']"> <!-- отображение каждого элемента BOOK --> </xsl:for-each>
Таблица стилей отображает каждый элемент BOOK в виде HTML-таблицы, а не через список элементов SPAN, как в предыдущих примерах. Она отображает значение атрибута Born после значения элемента AUTHOR, используя XSL-элемент value-of. Следующие элементы создают ячейку таблицы для отображения этих значений: