</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>

Изучаем XPath

Хотя мы уже знаем, например, что для обращения к текущему узлу можно присвоить «.» атрибуту select, «.» не является допустимым образцом выбора: это сокращение XPath для self::node(). Применение образцов выбора ограничено только двумя осями: ребенка и атрибута, но в XPath тринадцать осей, включая self. В этой главе мы рассмотрим все эти оси и приемы работы с ними.

Говоря формально, XPath позволяет вам ссылаться на определенные разделы XML-документов — это язык, предназначенный для адресации различных частей таких документов. При помощи XPath вы указываете, с какой частью документа вы хотите работать. Вот что W3C говорит о XPath: 

«Основная задача XPath — адресовать части документа XML. Для реализации этой первоочередной цели он также предоставляет основные средства оперирования строками, числами и логическими значениями. XPath обладает компактным, отличным от XML синтаксисом для облегчения его применения в идентификаторах URI и значениях атрибутов XML. XPath работает с абстрактной, логической структурой XML-документа, а не с его внешним синтаксисом. XPath получил свое имя благодаря тому, что для навигации по иерархической структуре XML-документа в нем используется нотация пути (path), как в идентификаторах URI».

Эта цитата взята из спецификации XPath 1.0. Заметьте, что, хотя основной целью XPath является адресация частей XML-документов, он также поддерживает синтаксис для работы со строками, числами и логическими (true/false) значениями, который, как мы увидим, сам по себе очень полезен.

В данный момент стандартом является XPath версии 1.0, но были выпущены требования для XPath 2.0. Пока еще нет рабочих проектов XPath 2.0, есть только список того, что W3C планирует туда включить. В конце главы будет приведен обзор этого списка. Первичные источники XPath вы найдете в двух местах:

• спецификация XPath 1.0. XPath применяется для поиска и указания определенных разделов и элементов в документах XML для дальнейшей работы с ними. www.w3.org/TR/xpath;

• требования XPath 2.0. XPath обновляется и в него включаются дополнительные средства поддержки XSLT 2.0 — в первую очередь поддержка схем XML. www.w3.org/TR/xpath20req.

Вас могут заинтересовать следующие руководства по XPath:

• http://www.zvon.org/xxl/XPathTutorial/General/examples.html;

• http://www.pro-solutions.com/tutorials/xpath/.

Рассмотренные нами до сих пор образцы выбора возвращали наборы узлов (node set), в которых можно было осуществить выбор или обработать набор в цикле, но XPath предоставляет более общие средства. Помимо наборов узлов, выражения XPath могут также возвращать числа, логические (true/false) значения и строки. Чтобы разобраться с XPath, необходимо разобраться с выражениями XPath. Только один вид выражения XPath (хотя и очень важный) возвращает наборы узлов, определяющие разделы документа. Как мы увидим, другие выражения XPath возвращают данные других видов.

Полный синтаксис выражений XPath описан в спецификации XPath, и я приведу его здесь для справки. Как и в случае образцов выбора, для формального определения выражений XPath W3C использует нотацию расширенных форм Бэкуса-Наура (РБНФ). (Описание этой грамматики вы можете найти по адресу www.w3.org/TR/REC-xml, раздел 6.) В следующем списке приведена нужная нам нотация РБНФ:

• ::= означает «определяется как»;

• + означает «один или больше»,

• * означает «ноль или больше»;

• | означает «или»;

• - означает «не»;

• ? означает «не обязательно»;

Также примите во внимание, что когда элемент заключен в одиночные кавычки, как 'ancestor' или '::', это значит, что элемент должен появиться в выражении буквально (как 'ancestor::PLANET'), — такие элементы называются литералами, literals. Ниже приведено полное формальное определение выражения XPath (здесь оно называется Expr):

Expr ::= OrExpr

OrExpr ::= AndExpr | OrExpr 'or' AndExpr

AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr

EqualityExpr ::= Relational Expr | EqualityExpr '=' Relational Expr

 | EqualityExpr '!=' RelationalExpr

RelationalExpr ::= AdditiveExpr | RelationalExpr '<' AdditiveExpr

 | RelationalExpr '>' AdditiveExpr | RelationalExpr '<=' AdditiveExpr

 | RelationalExpr '>=' AdditiveExpr

AdditiveExpr ::= MultiplicativeExpr | AdditiveExpr '+' MultiplicativeExpr

 | AdditiveExpr '-' MultiplicativeExpr

MultiplicativeExpr ::= UnaryExpr

 | MultiplicativeExpr

MultiplyOperator ::= UnaryExpr

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату