Элемент xsl:value-of
вычисляет некоторое значение (обычно, хотя и не всегда, на основе данных исходного документа) и копирует полученный результат в выходной документ. Атрибут select
элемента xsl:value-of
определяет, какое именно значение вычисляется.
Допустим, вы хотите заменить текст An Atom
именем элемента ATOM
, заданным его дочерним элементом NAME
. Вы можете заменить An Atom
на <xsl:value-of select="NAME"/>
, вот так:
<xsl:template match="ATOM"> <xsl:value-of select="NAME"/> </xsl:template>
Теперь при применении этой таблицы стилей к документу 17-1 будет сгенерирован следующий текст:
<html> <body> Hydrogen Helium </body> </html>
Выбранный пункт, в данном случае элемент NAME
, соотносится с текущим узлом. Текущий узел - это пункт, соответствующий шаблону, в данном случае это некоторый элемент ATOM
. Таким образом, когда элемент ATOM
, описывающий атом водорода вступает в соответствие с <xsl:template match="ATOM">
, элемент NAME
, содержащийся в этом элементе ATOM
, выбирается элементом xsl:value-of
. Аналогично, когда элемент ATOM
, описывающий атом гелия вступает в соответствие с <xsl:template match="ATOM">
, элемент NAME
, содержащийся в этом элементе ATOM
, выбирается элементом xsl:value-of
.
Значение узла - это всегда строка, она может быть и пустой. Точное содержание этой строки зависит от типа узла. Наиболее распространенным типом узлов являются элементы, значение элементного узла очень просто: это конкатенация (объединение) всех символьных данных (но не разметки!) между начальным и конечным тэгом данного элемента. Например, первый элемент ATOM
в документе 17-1 выглядит так:
<ATOM STATE="GAS"> <NAME>Hydrogen</NAME> <SYMBOL>H</SYMBOL> <ATOMIC_NUMBER>1</ATOMIC_NUMBER> <ATOMIC_WEIGHT>1.00794</ATOMIC_WEIGHT> <BOILING_POINT UNITS="Kelvin">20.28</BOILING_POINT> <MELTING_POINT UNITS="Kelvin">13.81</MELTING_POINT> <DENSITY UNITS="grams/cubic centimeter"> <!-- At 300K, 1 atm --> 0.0000899 </DENSITY> </ATOM>
А значение этого элемента таково:
Hydrogen H 1 1.00794 1 20.28 13.81 0.0000899
Я вычислил значение этого элемента удалив все тэги и комментарии. Все остальное, включая пробелы и переносы, осталось. Значения остальных шести типов узлов вычисляются схожим образом, обычно очевидными способами, см. таблицу 17-1.
Таблица 17-1: Значения узлов
Корень | Значение корневого элемента |
Элемент | Конкатенация всех парсируемых символьных данных, содержащихся в элементе, включая символьные данные всех потомков данного элемента |
Текст | Текст узла; по сути, сам узел |
Атрибут | Нормализованное значение атрибута, как описано в разделе 3.3.3 рекомендации XML 1.0; обычно ссылки на сущности раскрываются, а пробелы и символы переноса удаляются; в значение узла не включаются имя атрибута, знак равенства и кавычки |
Пространство имен | URI пространства имен |
Процессуальная инструкция | Данные, представленные в процессуальной инструкции; в значение не включаются разграничители процессуальной инструкции: <? и ?>
|
Комментарий | Текст комментария, <!-- и --> в значение не включаются |