копируя их в результирующий документ (листинг 6.14).
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='xml'/>
<xsl:template match='PLANETS'>
<PLANETS>
<TOC>
<xsl:apply-templates mode='toc'/>
</TOC>
<xsl:apply-templates select='@*|node()'/>
</PLANETS>
</xsl:template>
<xsl:template match='PLANET' mode='toc'>
<ENTRY>
<xsl:value-of select='NAME'/>
</ENTRY>
</xsl:template>
<xsl:template match='@*|node()'>
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
И, наконец, результат, выводящий planets.xml
с оглавлением:
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xml' href='planets.xsl'?>
<PLANETS>
<TOC>
<ENTRY>Mercury</ENTRY>
<ENTRY>Venus</ENTRY>
<ENTRY>Earth</ENTRY>
</TOC>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS='(Earth = 1)'>.0553</MASS>
<DAY UNITS='days'>58.65</DAY>
<RADIUS UNITS='miles'>1516</RADIUS>
<DENSITY UNITS='(Earth = 1)'>.983</DENSITY>
<DISTANCE UNITS='million miles'>43.4</DISTANCE><!--В перигелии- >
</PLANET>
.
.
.
</PLANETS>
В этой главе мы рассмотрели большую часть базового материала, и в следующей главе я собираюсь уделить внимание созданию полных выражений XPath. Хотя вы уже немного знакомы с этой темой по обсуждению образцов выбора в главе 4, нам осталось еще рассмотреть весьма значительную часть.
Глава 7
Работа с XPath
В главе 4 было объяснено, как создавать образцы выбора, которые можно использовать в атрибуте match
таких элементов, как <xsl:template>
. Образцы являются подмножеством полного языка 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>
, атрибуте value
элемента <xsl:number>
и в предикатах образцов выбора. На этот счет не может быть никаких сомнений: пока вы не знаете XPath, вы не знаете XSLT, и вся эта глава посвящена созданию выражений XPath и работе с ними.
Фактически мы работали с выражениями XPath начиная с главы 1, в которой мы впервые познакомились с атрибутом select
в элементах <xsl:apply-templates>
и <xsl:value-of>
:
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/PLANETS'>
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<TABLE BORDER='2'>
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>