Стивен Холзнер - XSLT
- Название:XSLT
- Автор:
- Жанр:
- Издательство:Питер
- Год:2002
- Город:Санкт-Петербург
- ISBN:5-94723-271-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Холзнер - XSLT краткое содержание
Эта книга посвящена XSLT — мощным и удобным системам преобразования документов. В ней не только рассматривается весь синтаксис XSLT, от основ до специальных аспектов, но и подробно излагаются современные способы использования XSLT.
Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на web-cepвepax, подключение к базам данных и использование браузеров для осуществления преобразований на лету.
Книга рассчитана на всех, кто хочет изучать XSLT и использовать его на практике
XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
<���Н1>
The Planets Table
</Н1>
Name | Mass | Radius | Day |
Создание образцов выбора
Как вы могли ожидать, исходя из того, что " child::MASS
" можно представить в виде " MASS
" и применения шаблонов, таких как " /
", " /PLANETS
" и т.д., вплотную познакомиться с созданием образцов выбора не так-то просто — этому посвящена вся глава 4.
Образцы выбора (match pattern) являются подмножеством полного языка XPath, их можно использовать в элементах >, и . В частности, в образец можно установить атрибут match у и , и атрибуты
count
и from
элемента . В следующем списке приведен ряд примеров образцов выбора, много других примеров будет показано в главе 4 при подробном обсуждении использования XPath для выбора узлов и атрибутов:
• " /
" выбирает корневой узел;
• " *
" выбирает элементы узлов (но не всех узлов, как зачастую ошибочно полагают);
• " PLANET
" выбирает элементы ;
• " PLANET/MASS
" выбирает все элементы , дочерние для элемента ;
• " //PLANET
" выбирает все элементы , производные от корневого узла;
• " .
" выбирает текущий узел (технически это не образец выбора, а выражение XPath, как мы увидим в главе 7).
Образцы можно также использовать в атрибуте select
элементов , , , и ; фактически атрибут select
этих элементов может содержать полные выражения XPath, а не только образцы выбора. Атрибут select
элемента определяет дочерний узел, значение которого нужно получить:
Теперь пора воспользоваться атрибутом select
элемента , поскольку это даст нам возможность указать, какой шаблон использовать и когда.
Выбор применяемого шаблона
Вплоть до нынешнего момента я использовал только версию элемента по умолчанию, как, например:
Name | Mass | Radius | Day |
Простое использование только указывает процессору XSLT осуществлять поиск всех шаблонов, выбирающих дочерние узлы контекстного узла, — это использование по умолчанию. Однако иногда это не лучший вариант, поскольку может потребоваться применять шаблоны в определенном порядке или иным образом выбрать применяемые шаблоны (последнее можно сделать при помощи атрибута select
элемента ).
Например, до сих пор мы только получали значение каждого элемента , и при помощи :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
</Н1>
Name | Mass | Radius | Day |
Здесь только извлекается «сырое» строковое значение каждого узла, которое помещается в HTML-таблицу. Однако может потребоваться дополнительная обработка каждого элемента — например, получить также значения атрибутов UNITS каждого элемента и отобразить их:
Mercury .0553
58.65
1516
.983
43.4
.
.
.
Для этого нельзя просто применить элемент , поскольку он вернет значение узла только как текст, а не как значения атрибута. Вместо этого нужно создать новый набор шаблонов, по одному для каждого интересующего нас элемента: , и . У элемента нет никаких атрибутов, поэтому для него не нужны шаблоны — нужно только значение узла. Каждому из этих новых шаблонов требуется получить значение элемента, а также значение атрибута UNITS
.
Чтобы быть уверенным в том, что эти новые шаблоны применяются в правильном порядке, соответствующем заголовкам HTML-таблицы, я явно перечислю все новые шаблоны, выбирая их один за другим при помощи атрибута select
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
ИСПОЛЬЗОВАНИЕ ИМЕНОВАННЫХ ШАБЛОНОВ
К шаблонам можно также обращаться по имени. Этот вопрос будет рассмотрен в главе 9.
Теперь к каждому элементу , и применяется новый шаблон: мы не просто получаем строковое значение узла при помощи , мы можем дополнительно обработать каждый элемент — например, прочитать значения атрибута UNITS
. Сначала я получу строковые значения каждого из элементов , и . Теперь, когда у нас есть шаблон для каждого из этих узлов-элементов и каждый узел является контекстным узлом в своем шаблоне, вместо того, чтобы ссылаться на узел элемента по имени, мы можем сослаться на него как на контекстный узел при помощи выражения XPath "." (листинг 3.2):
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Этот код только воспроизводит то, что мы уже делали ранее в предыдущей версии planets.xsl
, использующей , и т.д., то есть читающей и отображающей данные каждого элемента , и . Теперь же, когда у нас есть отдельный шаблон для каждого из этих элементов, можно осуществить дополнительную обработку — например чтение значений атрибутов.
Чтение значений атрибутов
Чтобы получить доступ к значению атрибута при помощи XPath, нужно добавить к имени атрибута префикс @, например: " @src
", " @height
", " @width
" и т.д.
Для выбора любого атрибута можно применить выражение " @*
". Чтобы сослаться на атрибут UNITS
в каждом элементе , и , следует использовать выражение " @UNITS
". Следовательно, получить значения и отобразить единицы (unit) каждого измерения в planets.xml
можно так (листинг 3.3).
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
The Planets Table
Name | Mass | Radius | Day |
Результаты работы показаны на рис. 3.1, Как видите, теперь мы извлекли строковое значение атрибута UNITS и отобразили его.

Рис. 3.1.Вывод значений атрибутов, первый вариант
Рисунок 3.1 не совсем точен: обратите внимание на то, что между значением и соответствующей единицей измерения в таблице нет пробела. Процессор XSLT просто поместил в результирующее дерево текст без каких-либо разделителей между текстовыми узлами. Хотя это в точности соответствует требованиям рекомендации XSLT, нам бы хотелось, чтобы элементы таблицы выглядели как «1516 miles», а не «1516miles». Как нам добавить этот дополнительный пробел?
Элемент
Работа с пробелами всегда обсуждается при рассмотрении XSLT, и в данной главе я уделю этой теме некоторое время. Вставить единственный пробел несложно при помощи элемента , который используется для вставки символьного текста непосредственно в дерево вывода. У этого элемента только один атрибут:
Читать дальшеИнтервал:
Закладка: