Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

<TD>

<FONT COLOR="{$COLOR}"><xsl:apply-templates select="DAY"/></FONT>

</TD>

 </TR>

</xsl:template>

Как задавать значения шаблона в командной строке

Кроме возможностей, предоставляемых элементами

<xsl:param>
и
<xsl:with-param>
, значение параметров таблицы стилей во многих процессорах XSLT можно также задавать в командной
строке. Способ зависит от конкретного процессора.

Следующий пример показывает, как можно присвоить параметру

param1
значение
value1
в командной строке, используя процессор XSLT от Oracle в Windows. Заметьте, что при установке значений параметра в командной строке его все равно нужно объявлять в таблице стилей при помощи
<xsl:param>
:

C:\>java oraclе.xml.parser.v2.oraxsl -p param1='value1' planets.xml planets.xsl output.xml

Вот как то же самое можно сделать при помощи Saxon:

C:\>saxon source.xml stylesheet.xsl param1=value1 > output.xml

при помощи Xalan:

C:\>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT output.xml -PARAM parma1 value1

и XT:

C:\XSL>java -Dcom jclark.xsl.sax parser=org.apache.xerces.parsers.SAXParser.com.jclark.xsl.sax.Driver planets.xml planets.xsl output.xml param1=value1

Элемент <xsl:key>: выбор по ключу 

Элемент

<xsl:key>
позволяет создать ключ и выбрать узлы по этому ключу. Он обладает следующими атрибутами:

• 

name
(обязательный). Имя ключа, устанавливается в
QName
;

• 

match
(обязательный). Устанавливается в образец выбора для выбора узлов, к которым применяется ключ;

• 

use
(обязательный). Устанавливается в выражение, определяющее значение ключа.

При помощи ключей можно легко распознавать элементы; конкретные ключи можно выбрать при помощи образца «key». В главе 4 мы познакомились с ключами, имеющими одно значение. В следующем примере я использую ключи для выбора планет, у которых атрибут

COLOR
был установлен в «BLUE» — в данном случае это Земля:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xml" href="#"?>

<PLANETS>

 .

 .

 .

 <PLANET COLOR="BLUE">

<NAME>Earth</NAME>

<MASS UNITS="(Earth = 1)">1</MASS>

<DAY UNITS="days">1</DAY>

<RADIUS UNITS="miles">2107</RADIUS>

<DENSITY UNITS="(Earth = 1)">1</DENSITY>

<DISTANCE UNITS="million miles">128.4</DISTANCE><!--B перигелии-->

 </PLANET>

</PLANETS>

Я

создал ключ
COLOR
, выбирающий элементы
<PLANET>
путем проверки их атрибута
COLOR
. Ключ выглядит следующим образом:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:key name="COLOR" match="PLANET" use="@COLOR"/>

 .

 .

 .

После этого я применил образец «key» для того, чтобы выбрать элементы

<PLANET>
, у которых атрибут
COLOR
установлен в «BLUE»:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:key name="COLOR" match="PLANET" use="@COLOR"/>

 <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 select="key('COLOR', 'BLUE')"/>

</TABLE>

</BODY>

</HTML>

 </xsl:template>

 .

 .

 .

И вот результат — как видите, образцу удовлетворяет только Земля:

<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>

Поделиться с друзьями: