Книга: XSLT
Применение оси ancestor-or-self
Разделы на этой странице:
Применение оси ancestor-or-self
Ось ancestor-or-self
содержит всех предков контекстного узла, а также сам контекстный узел. Это означает, помимо прочего, что такая ось всегда содержит корневой узел.
В листинге 7.4 добавлены атрибуты AUTHOR
со значением «Steve» в весь документ.
Листинг 7.4. planets.xml с атрибутами AUTHOR
<?xml version=1.0"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS AUTHOR="Steve" >
<PLANET AUTHOR="Steve" >
<NAME>Mercury</NAME>
<MASS AUTHOR="Steve" 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 AUTHOR="Steve">
<NAME>Venus</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><!--В перигелии-->
</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>
Предположим теперь, что я хочу перечислить по имени всех предков элементов <MASS>
, имеющих атрибут AUTHOR
, а также текущий элемент <MASS>
, если у него есть атрибут AUTHOR
. Это можно сделать при помощи оси ancestor-or-self
и функции local-name
(листинг 7.5).
Листинг 7.5. Применение оси ancestor-or-self
<?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="MASS">
<xsl:for-each select="ancestor-or-self::*[@AUTHOR]">
<xsl:value-of select="local-name(.)"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="PLANET">
<xsl:apply-templates select="MASS"/>
</xsl:template>
</xsl:stylesheet>
Вот результат; показаны выбранные предки всех трех элементов <MASS>
, включая сам элемент <MASS>
, при условии, что у него имеется атрибут AUTHOR
:
<?xml version="1.0" encoding="UTF-8"?>
PLANETS PLANET MASS
PLANETS PLANET
PLANETS
- Изучаем XPath
- Типы данных XPath
- Создание путей расположения XPath
- Шаги расположения XPath, часть 1: оси
- Шаги расположения XPath, часть 2: условия узлов
- Шаги расположения XPath, часть 3: предикаты
- Применение осей XPath
- Применение оси ancestor
- Применение оси ancestor-or-self
- Применение оси descendant
- Применение оси descendant-or-self
- Применение оси following
- Применение оси following-sibling
- Применение оси namespace
- Применение оси parent
- Применение оси preceding
- Применение оси preceding-sibling
- Применение оси self
- Примеры путей расположения
- Сокращенный синтаксис XPath
- Проверка выражений XPath
- XPath 2.0
- Применение оси following-sibling
- Применение оси descendant
- Применение оси ancestor
- Применение оси descendant-or-self
- Применение оси parent
- Применение оси self
- Применение оси following
- «Вещи» как носители корпоративных стандартов
- О чем просить?
- Внешние носители информации
- Часть III Восстановление поврежденных носителей резервных копий
- Как переносить данные через USB-брелок («флэшку»)?