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

ЖАНРЫ

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

Шрифт:

<?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="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

 </xsl:template>

 <xsl:template match="NAME[text = 'Venus']">

<NAME>

The Planet of Love

</NAME>

 </xsl:template>

</xsl:stylesheet>

И

вот результат:

<?xml version="1.0" encoding="utf-8"?>

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

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

 <PLANET>

<NAME>

The Planet of Love

</NAME>

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

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

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

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

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

 </PLANET>

 <PLANET>

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

В действительности, в выражениях XPath можно ссылаться на контекстный узел при помощи ".", и значением по умолчанию для узла является его текст, поэтому следующее правило работает точно так же:

<?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="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

 </xsl:template>

 <xsl:template match="NAME[. = 'Venus']">

<NAME>

The Planet of Love

</NAME>

 </xsl:template>

</xsl:stylesheet>

Имеет

смысл привести как можно больше примеров — примеров XPath или образцов выбора никогда не бывает слишком много. Ниже приведен содержательный ряд примеров образцов выбора:

• 

PLANET
выбирает дочерние элементы
<PLANET>
контекстного узла;

• 

/PLANETS
выбирает корневой элемент
<PLANETS>
документа;

• 

*
выбирает все дочерние элементы контекстного узла;

• 

PLANET[3]
выбирает третьего ребенка
<PLANET>
контекстного узла;

• 

PLANET[last]
выбирает последнего ребенка
<PLANET>
контекстного узла;

• 

PLANET[NAME]
выбирает детей
<PLANET>
контекстного узла, имеющих детей
<NAME>
;

• 

PLANET[DISTANCE]/NAME
выбирает все элементы
<NAME>
элементов
<PLANET>
, содержащих по крайней мере один элемент
<DISTANCE>
;

• 

PLANET[DISTANCE]/PLANET[DAY]
выбирает все элементы
<PLANET>
элементов
<PLANET>
, в которых элемент
<PLANET>
содержит по крайней мере один элемент
<DISTANCE>
, и элемент
<PLANET>
содержит по крайней мере один элемент
<DAY>
;

• 

РLANETS[РLАNET/DAY]
выбирает все элементы
<PLANETS>
, содержащие элементы
<PLANET>
как минимум с одним элементом
<DAY>
;

• 

PLANET[DISTANCE][NAME]
выбирает все элементы
<PLANET>
, имеющие элементы
<DISTANCE>
и
<NAME>
;

• 

PLANETS/PLANET[last]
выбирает последний элемент
<PLANET>
в каждом элементе
<PLANETS>
;

• 

*/PLANET
выбирает всех внуков
<PLANET>
контекстного узла;

• 

/PLANETS/PLANET[3]/NAME[2]
выбирает второй элемент
<NAME>
третьего элемента
<PLANET>
элемента
<PLANETS>
;

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