Глава 7  Работа с XPath

Глава 7 

Работа с XPath

В главе 4 было объяснено, как создавать образцы выбора, которые можно использовать в атрибуте match таких элементов, как <xsl:template>. Образцы являются подмножеством полного языка XPath, и в этой главе будет рассмотрена полная версия XPath.

Выражения XPath применимы в XSLT не только в образцах выбора, но и во многих других приложениях: в атрибуте select элементов <xsl:apply-templates>, <xsl:value-of>, <xsl:for-each>, <xsl:param>, <xsl:variable>, <xsl:with-param>, <xsl:copy-of> и <xsl:sort>, в шаблонах значений атрибутов, в атрибуте test элементов <xsl:if> и <xsl:when>, атрибуте value элемента <xsl:number> и в предикатах образцов выбора. На этот счет не может быть никаких сомнений: пока вы не знаете XPath, вы не знаете XSLT, и вся эта глава посвящена созданию выражений XPath и работе с ними.

Фактически мы работали с выражениями XPath начиная с главы 1, в которой мы впервые познакомились с атрибутом select в элементах <xsl:apply-templates> и <xsl:value-of>:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     The Planets Table

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     The Planets Table

    </H1>

    <TABLE BORDER="2">

     <TR>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

     </TR>

     <xsl:apply-templates/>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match="PLANET">

  <TR>

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

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

   <TD><xsl:apply-templates select="RADIUS"/></TD>

   <TD><xsl:apply-templates select="DAY"/></TD>

  </TR>

 </xsl:template>

 <xsl:template match="MASS">

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

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:template>

 <xsl:template match="RADIUS">

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

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:template>

 <xsl:template match="DAY">

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

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:template>

</xsl:stylesheet>