XSLT
Шрифт:
<?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>
;
Поделиться с друзьями: