В следующем примере мы поместим элемент <xsl:apply-templates>
туда, куда нам требуется вставить данные из элементов <PLANET>
в таблицу HTML. Я также добавил новый шаблон для обработки элементов <PLANET>
:
<?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>
</HTML>
</xsl:template>
<xsl:template match='PLANET'>
.
.
.
</xsl:template>
</xsl:stylesheet>
В новом шаблоне, обрабатывающем элементы <PLANET>
, я должен извлечь данные из каждого элемента <PLANET>
, то есть восстановить значения в дочерних элементах элемента <PLANET>
, таких как <MASS>
, <DAY>
и т.д.:
<?xml version='1.0'?>
<?xml-stylesheet type='text/xml' href='planets.xsl'?>
<PLANETS>
<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><!--B перигелии-- >
</PLANET>
.
.
.
Это можно сделать при помощи элемента <xsl:value-of>
.
Доступ к значениям узлов
Элемент <xsl:value-of>
записывает в результирующий документ строковое значение выражения; в частности, с его помощью можно возвратить значение узла, которым для элемента будет заключенный в элемент текст. Атрибуту выбора элемента <xsl:value-of>
можно присвоить выражение XPath, задающее узел или набор узлов. В шаблоне, задающем элементы <PLANET>
, обратиться к дочернему элементу <MASS>
можно при помощи выражения XPath 'child::MASS
'. Как мы увидим в главе 4, выражения XPath можно писать разными способами: например, вместо 'child::MASS
' можно просто написать 'MASS
'. Таким образом, получить данные дочерних элементов, таких как <MASS>
, <DAY>
и т.д., можно следующим способом (листинг 3.1).
<?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>
<Н1>
The Planets Table
</Н1>
<TABLE BORDER='2'>
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match='PLANET'>