<xsl:text> </xsl:text>
<xsl:value-of select='@UNITS'/>
</xsl:template>
<xsl:template match='RADIUS'>
<xsl:value-of select='.'/>
<xsl:text> </xsl:text>
<xsl:value-of select='@UNITS'/>
</xsl:template>
<xsl:template match='DAY'>
<xsl:message terminate='yes'>
Sorry. DAY information is classified.
</xsl:message>
</xsl:template>
</xsl:stylesheet>
Вот результаты применения этой таблицы стилей в Xalan:
C:planets>java org.apache.xalan xslt.Process -IN planets.xml -XSL message.xsl -OUT planets.html
file:///C:/XSL/messages/message.xsl: Line 49; Column 38;
Sorry. DAY information is classified.
XSLT Error (javax.xml.transform.TransformerException):
Stylesheet directed termination
При помощи элемента <xsl:message>
можно выводить информацию о том, что происходит при обработке таблицы стилей, что может пригодиться не только для вывода ошибок и предупреждений, но и для отладки таблиц стилей.
Далее в книге будут рассмотрены и другие посвященные шаблонам темы — такие, как вызов именованных шаблонов и использование параметров. В следующей главе мы перейдем к большой и важной теме — созданию образцов выбора, при помощи которых в XSLT можно выбирать, какие узел или узлы вам нужны для работы. Мы уже затрагивали тему работы с образцами выбора, теперь же пора перейти к их систематическому рассмотрению.
Глава 4
Создание образцов выбора
До сих пор материал книги был достаточно очевиден, за исключением одного: несколько загадочных образцов выбора (match pattern). Мы работали с различными образцами выбора, такими как «/PLANETS» в элементах <xsl:template>
, не предлагая систематического объяснения того, как в действительности работают эти образцы, — как в этом случае:
<xsl:template match='/PLANETS'>
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
.
.
.
</BODY>
</HTML>
</xsl:template>
В этой главе мы рассмотрим все необходимое, что нужно знать для создания образцов выбора в XSLT. Образцы выбора применяются в элементах <xsl:template>
, <xsl:key>
и <xsl:number>
; с элементом <xsl:template>
мы работали с самого начала книги, элемент <xsl:key>
мы увидим в главе 9 и элемент <xsl:number>
— в главе 5. В частности, для выбора по образцу у элементов <xsl:template>
и <xsl:key>
используется атрибут match
, а у элемента <xsl:number>
— атрибуты count
и from
.
Образцы выбора можно также применять в атрибуте select
таких элементов, как <xsl:apply-templates>
, <xsl:value-of>
, <xsl:for- each>
и <xsl:copy-of>
. Здесь важно отметить один момент: атрибут select
этих элементов обладает большими возможностями, чем атрибуты match
, count
и from
элементов <xsl:template>
, <xsl:key>
и <xsl:number>
, потому что в select
можно использовать полные выражения XPath, а не только образцы выбора.
Образцы выбора являются подмножеством выражений XPath, то есть все образцы выбора являются допустимыми выражениями XPath, но не все выражения XPath являются образцами выбора. Единственные выражения XPath, которые могут быть образцами, — это выражения, возвращающие набор узлов (даже набор, состоящий из одного узла) и использующие пути, которые задают только дочерние узлы или узлы атрибутов.
Образцы выбора определены в самой рекомендации XSLT, в то время как выражения XPath определены в рекомендации XPath (www.w3.org/TR/xpath); тем не менее, эти рекомендации совместимы, потому что все образцы выбора являются одновременно выражениями XPath.
СОЗДАНИЕ ПОЛНЫХ ВЫРАЖЕНИЙ XPATH
В главе 7 «Работа и изучение XPath» показано, как создавать полные выражения XPath. Полные выражения XPath можно применять в XSLT в следующих местах: в атрибуте select элементов <xsl:apply- templates>, <xsl:value-of>, <xsl:for-each>, <xsl:param>, <xsl:variable>, <xsl:with- param>, <xsl:copy-of> и <xsl:sort>; в значениях шаблонов атрибутов; в атрибуте test элементов <xsl:if> и <xsl:when>; в значении атрибута элемента <xsl:number> и в предикатах образцов выбора.
Чтобы еще больше все усложнить, следует сказать, что выражения XPath можно использовать в специальной, необязательной части (и только в этой части) образцов выбора: вPLANET[NAME='Venus']
выбирает дочерние узлы <PLANET>
контекстного узла, у которых есть дочерние узлы <NAME>
с текстом «Venus». Выражения внутри [ и ] представляют собой настоящие выражения XPath с известными ограничениями, которые будут рассмотрены в этой главе.
Безусловно, для создания образцов выбора необходим опыт, поэтому в данной главе приводится