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.xsl'?>
<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>