</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>
;
• //PLANET
выбирает всех потомков <PLANET>
корня документа;
• PLANETS//PLANЕТ
выбирает потомков элемента <PLANET>
детей элемента <PLANETS>
контекстного узла;
• //PLANET/NAME
выбирает все элементы <NAME>
, дочерние по отношению к родителю <PLANET>
;
• РLАNETS//PLАNET/DISTАNСЕ//РЕRIНЕLION
выбирает элементы <PERIHELION>
везде внутри элемента <DISTANCE>
элемента <PLANET>
, везде внутри элемента <PLANETS>
;
• @UNITS
выбирает атрибут UNITS
контекстного узла;
• @*
выбирает все атрибуты контекстного узла;
• *[@UNITS]
выбирает все элементы с атрибутом UNITS
;
• DENSITY/@UNITS
выбирает атрибут UNITS
в элементах <DENSITY>
;
• PLANET[not(@COLOR) or not(@SIZE)]
выбирает элементы <PLANET>
, не имеющие обоих атрибутов COLOR
и SIZE
;
• PLANETS[@STAR='Sun']//DENSITY
выбирает любой элемент <DENSITY>
с элементом-предком <PLANETS>
, имеющим атрибут STAR
со значением 'Sun
';
• PLANET[NAME='Venus']
выбирает детей <PLANET>
контекстного узла, имеющих детей <NAME>
с текстом 'Venus
';
• PLANET[NAME[1]='Venus']
выбирает все элементы <PLANET>
, у которых в первом элементе <NAME>
содержится текст в 'Venus
';
• DAY[@UNITS!='million miles']
выбирает все элементы <PLANET>
, атрибут UNITS
которых не равен 'million miles
';
• PLANET[@UNITS='days']
выбирает всех детей <PLANET>
контекстного узла, имеющих атрибут UNITS
со значением 'days
';
• PLANET[6][@UNITS='days']
выбирает шестого ребенка <PLANET>
контекстного узла, только если у этого ребенка есть атрибут UNITS
со значением 'days
', — что также можно записать как PLANET [@UNITS='days'][6]
;
• PLANET[@COLOR and @UNITS]
выбирает всех детей <PLANET>
контекстного узла, имеющих оба атрибута COLOR
и UNITS
;
• *[1][NAME]
выбирает любой элемент <NAME>
, являющийся первым ребенком своего родителя;
• *[position() < 5]
выбирает первые пять детей контекстного узла;
• *[position() < 5][@UNIT]
выбирает первые пять детей контекстного узла с атрибутом UNITS
;
• text()
выбирает все дочерние текстовые узлы контекстного узла;
• text()[starts-with(., 'In the course of human events')]
выбирает все дочерние текстовые узлы контекстного узла, начинающиеся с 'In the course of human events
';
• /PLANETS[@UNITS='million miles']
выбирает все элементы PLANETS
, у которых значение атрибута UNITS
равно 'million miles
';
• PLANET[/PLANETS/@UNITS=@REFERENCE]
выбирает все элементы <PLANET>
, у которых значение атрибута REFERENCE
такое же, как