<P>
<xsl:value-of select='NAME'/>
</P>
</xsl:template>
</xsl:stylesheet>
Значение узла, содержащего текст, будет просто текстом, поэтому результат применения этой таблицы стилей к planets.xml
следующий:
<HTML>
<P>Mercury</P>
<P>Venus</P>
<P>Earth</P>
</НТМL>
АТРИБУТ DISABLE-OUTPUT-ESCAPING
Атрибут disable-output-escaping элемента <xsl:value-of> более подробно рассмотрен в главе 3.
Предположим, нам нужно осуществить нечто более сложное — например, преобразовать данные из planets.xml
в HTML-таблицу в новом файле planets.html
(рис. 2.1), как мы видели в главе 1. Теперь это можно сделать при помощи <xsl:value-of>
.
Рис. 2.1. Planets.html в Internet Explorer
Здесь важно учесть один момент. В planets.xml
формально не задан порядок элементов <MASS>
, <RADIUS>
, <DAY>
и <DISTANCE>
, однако важно, чтобы эти элементы обрабатывались в определенном порядке в соответствии с заголовками таблицы. Поэтому я буду использовать элементы <xsl:value-of>
в том порядке, в котором они требуются в таблице HTML.
Таким образом, чтобы создать HTML-таблицу, изображенную на рис. 2.1, я сначала ищу элемент <PLANETS>
и затем заменяю его на HTML для создания самой HTML-таблицы. Элемент <PLANETS>
— дочерний элемент корневого узла, и поскольку на корневой узел можно сослаться через «/», на элемент <PLANETS>
можно сослаться непосредственно через '/PLANETS
', без необходимости предварительно применять шаблон для корневого узла. Это пример выражения XPath, большое число подобных мы также увидим в главе 4.
Ниже приведен пример того, как я начал создавать HTML-таблицу путем выбора элемента <PLANETS>
непосредственно как '/PLANETS
' — заметьте, что для применения шаблонов к любым дочерним узлам <PLANETS>
я использовал <xsl:apply-templates>
:
<?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>
.
.
.
Каждый дочерний узел <PLANET>
имеет дочерние узлы <NAME>
, <MASS>
, <RADIUS>
и <DAY>
, и я хочу обрабатывать их именно в таком порядке — для того чтобы они добавлялись в HTML-таблицу в соответствии с заголовками таблицы. Для задания порядка их обработки я поместил элементы <xsl:value-of>
(листинг 2.5).
<?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>