Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 62

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π₯ΠΎΠ»Π·Π½Π΅Ρ€

<xsl:template match="PLANET">

 <DATA>

  <NAME>

   <xsl:value-of select="descendant::NAME"/>

  </NAME>

  <MASS>

   <xsl:value-of select="descendant::MASS"/>

  </MASS>

  <DAY>

   <xsl:value-of select="descendant::DAY"/>

  </DAY>

 </DATA>

</xsl:template>

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим всС пСрСчислСнныС оси. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ осью являСтся descendant, Π° ΠΈΠΌΠ΅Π½Π° элСмСнтов NAME, MASS ΠΈ DAY β€” это условия ΡƒΠ·Π»ΠΎΠ².

Π¨Π°Π³ΠΈ располоТСния XPath, Ρ‡Π°ΡΡ‚ΡŒ 2: условия ΡƒΠ·Π»ΠΎΠ²

ΠŸΡ€ΠΈ создании ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² Π² качСствС условий ΡƒΠ·Π»ΠΎΠ² (node test) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΡƒΠ·Π»ΠΎΠ² ΠΈΠ»ΠΈ символ подстановки * для Π²Ρ‹Π±ΠΎΡ€Π° любого ΡƒΠ·Π»Π° элСмСнта. НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ child::*/child::NAME Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ всС элСмСнты <NAME>, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€Π°Π²Π½ΡƒΠΊΠ°ΠΌΠΈ контСкстного ΡƒΠ·Π»Π°. Π’ XPath ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ ΠΈ символа подстановки ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ±Ρ€Π°Π·Ρ†Π°Ρ… Π²Ρ‹Π±ΠΎΡ€Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ условия ΡƒΠ·Π»ΠΎΠ²:

β€’ ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΡƒΠ·Π»Π° comment() Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΡƒΠ·Π»Ρ‹ коммСнтария;

β€’ ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΡƒΠ·Π»Π° node() Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΡƒΠ·Π΅Π» любого Ρ‚ΠΈΠΏΠ°;

β€’ ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΡƒΠ·Π»Π° processing-instruction() Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΡƒΠ·Π΅Π» инструкции ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ скобках ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΉ инструкции ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ;

β€’ ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ ΡƒΠ·Π»Π° text() Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ тСкстовый ΡƒΠ·Π΅Π»

НапримСр, Π² листингС 7.2 Ρ‚Π°Π±Π»ΠΈΡ†Π° стилСй Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ всС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ условия ΡƒΠ·Π»Π° comment() ΠΈ создаСт для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ коммСнтария Π½ΠΎΠ²Ρ‹ΠΉ, <!--Warning:comment found!--> (Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! НайдСн ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ!).

Листинг 7.2. Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

<?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="/">

  <xsl:for-each select="descendant::comment()">

   <xsl:comment>Warning: comment found!</xsl:comment>

  </xsl:for-each>

 </xsl:template>

</xsl:stylesheet>

ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ стилСй ΠΊ planets.xml получаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

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

<!--Warning: comment found!-->

<!--Warning: comment found!-->

<!--Warning: comment found!-->

Π¨Π°Π³ΠΈ располоТСния XPath, Ρ‡Π°ΡΡ‚ΡŒ 3: ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹

ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Π² шагС располоТСния XPath сам содСрТит Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π² скобки Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ XPath, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вычисляСтся Π² истину ΠΈΠ»ΠΈ лоТь. Когда Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ вычислСния выраТСния являСтся строка, XPath считаСт Π΅Π΅ истиной, Ссли строка Π½Π΅ пуста. Когда Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” Π½Π°Π±ΠΎΡ€ ΡƒΠ·Π»ΠΎΠ², XPath считаСт Π΅Π³ΠΎ истиной, Ссли ΠΎΠ½ Π½Π΅ пуст. Когда Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” число, Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ истиной, Ссли это число совпадаСт с контСкстной ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PLANET[3] Π±ΡƒΠ΄Π΅Ρ‚ истиной Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° истиной Π±ΡƒΠ΄Π΅Ρ‚ PLANET[position()=3].

ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ содСрТат выраТСния XPath Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Π½Π°ΠΌ Π½Π° протяТСнии этой Π³Π»Π°Π²Ρ‹: Ρ€Π΅Π΄ΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΡƒΠ·Π»ΠΎΠ², Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ строки, числа ΠΈΠ»ΠΈ логичСскиС значСния. НапримСр, ΠΏΡƒΡ‚ΡŒ располоТСния preceding-sibling::MASS[position()*4] Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… элСмСнта-Π±Ρ€Π°Ρ‚Π° <MASS> для контСкстного ΡƒΠ·Π»Π°.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ осСй XPath

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΌΡ‹ рассмотрСли Ρ‚Ρ€ΠΈ части шагов располоТСния β€” ось, условиС ΡƒΠ·Π»Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этими элСмСнтами ΠΏΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Π½Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ€Π°Π·Ρ†Π°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€Π°, Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ось Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ β€” preceding-sibling. Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ оси, Π²Ρ‹Π±ΠΈΡ€Π°Π²ΡˆΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ XSLT β€” оси child ΠΈ attribute; Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ ΠΌΡ‹ рассмотрим Π½ΠΎΠ²Ρ‹Π΅ оси, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π² ΠΏΠΎΠ»Π½Ρ‹Ρ… выраТСниях XPath, ΠΈ Π½Π°Ρ‡Π½Π΅ΠΌ с оси ancestor.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ оси ancestor

Ось ancestor (ΠΏΡ€Π΅Π΄ΠΎΠΊ) содСрТит всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² контСкстного ΡƒΠ·Π»Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π΄Π΅Π΄ΡƒΡˆΠ΅ΠΊ, ΠΏΡ€Π°Π΄Π΅Π΄ΡƒΡˆΠ΅ΠΊ ΠΈ Ρ‚.Π΄. Π­Ρ‚Π° ось всСгда содСрТит ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» β€” Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ контСкстным ΡƒΠ·Π»ΠΎΠΌ Π½Π΅ являСтся сам ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π».

ВзглянитС Π½Π° листинг 7.3, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ оси ancestor осущСствляСтся поиск ΠΈΠΌΠ΅Π½ (Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π² элСмСнтС <NAME>) всСх ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² элСмСнтов <MASS>.

Листинг 7.3. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ оси ancestor

<?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::*">

   <xsl:value-of select="./NAME"/>

  </xsl:for-each>

 </xsl:template>


 <xsl:template match="PLANET">

  <xsl:apply-templates select="MASS"/>

 </xsl:template>

</xsl:stylesheet>

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ стилСй ΠΊ planets.xml:

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

Mercury

Venus

Earth

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ оси 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

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ оси descendant

Ось descendant (ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ) содСрТит всСх ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² контСкстного ΡƒΠ·Π»Π°. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ сюда Π½Π΅ входят Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈΠ»ΠΈ ΡƒΠ·Π»Ρ‹ пространств ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ (листинг 7.6) дСмонстрируСтся Ρ€Π°Π±ΠΎΡ‚Π° с этой осью. На этот Ρ€Π°Π· я Ρ…ΠΎΡ‡Ρƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΊ элСмСнту <PLANET> ΠœΠ΅Ρ€ΠΊΡƒΡ€ΠΈΡ: <INFO>Sorry, Mercury has blown up and is no longer available.</INFO> (Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, Π½ΠΎ ΠœΠ΅Ρ€ΠΊΡƒΡ€ΠΈΠΉ взорвался ΠΈ большС Π½Π΅ доступСн.). Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠœΠ΅Ρ€ΠΊΡƒΡ€ΠΈΠΉ, ΠΌΠ½Π΅ достаточно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ элСмСнта <PLANET> строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«MercuryΒ», Ρ‡Ρ‚ΠΎ я сдСлаю ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ выраТСния XPath Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° Π²Ρ‹Π±ΠΎΡ€Π°.

Листинг 7.6. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ оси descendant

<?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="PLANET[descendant::*='Mercury']">

  <xsl:copy>

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

   <INFO>Sorry. Mercury has blown up and is no longer available.</INFO>

  </xsl:copy>

 </xsl:template>


 <xsl:template match="@*|node()">

  <xsl:copy>

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

  </xsl:copy>

 </xsl:template>

</xsl:stylesheet>

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΌ элСмСнтом <INFO> Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠœΠ΅Ρ€ΠΊΡƒΡ€ΠΈΡ:

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

<?xml-stylesheet type="text/xml" href="planets.xsl"?>

<PLANETS>