Шаги расположения XPath, часть 1: оси

Шаги расположения XPath, часть 1: оси

В пути расположения ancestor::NAME, адресующем элемент <NAME>, который является предком контекстного узла, ancestor выступает осью. XPath поддерживает много различных осей, ниже приведен полный список:

• ось ancestor содержит предков (ancestor) контекстного узла, то есть родителей контекстного узла, родителей этих родителей и т.д., вплоть до корневого узла (включая его);

• ось ancestor-or-self содержит контекстный узел и его предков;

• ось attribute содержит атрибуты контекстного узла;

• ось child содержит детей контекстного узла;

• ось descendant содержит потомков (descendant) контекстного узла, то есть его детей, детей этих детей и т.д.;

• ось descendant-or-self содержит контекстный узел и его потомков;

• ось following содержит все узлы в том же документе, такие же, как контекстный узел, встретившиеся после контекстного узла;

• ось following-sibling содержит всех последующих братьев контекстного узла. «Брат» — узел, расположенный на том же уровне, что и контекстный узел;

• ось namespace содержит узлы пространств имен контекстного узла;

• ось parent содержит родителя контекстного узла;

• ось preceding содержит все узлы до контекстного узла;

• ось preceding-sibling содержит всех предшествующих «братьев» контекстного узла;

• ось self содержит контекстный узел.

В следующем примере шаблона я воспользовался осью descendant для выбора потомков контекстного узла, куда входят дочерние узлы, узлы-внуки, узлы-правнуки и т.д.:

<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 — это условия узлов.