<TR>

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

   <TD><xsl:value-of select='MASS'/></TD>

   <TD><xsl:value-of select='RADIUS'/></TD>

   <TD><xsl:value-of select='DAY'/></TD>

  </TR>

 </xsl:template>

</xsl:stylesheet>

Создание образцов выбора

Как вы могли ожидать, исходя из того, что 'child::MASS' можно представить в виде 'MASS' и применения шаблонов, таких как '/', '/PLANETS' и т.д., вплотную познакомиться с созданием образцов выбора не так-то просто — этому посвящена вся глава 4.

Образцы выбора (match pattern) являются подмножеством полного языка XPath, их можно использовать в элементах <xsl:template>, <xsl:key> и <xsl:number>. В частности, в образец можно установить атрибут match у <xsl:template> и <xsl:key>, и атрибуты count и from элемента <xsl:number>. В следующем списке приведен ряд примеров образцов выбора, много других примеров будет показано в главе 4 при подробном обсуждении использования XPath для выбора узлов и атрибутов:

• '/' выбирает корневой узел;

• '*' выбирает элементы узлов (но не всех узлов, как зачастую ошибочно полагают);

• 'PLANET' выбирает элементы <PLANET>;

• 'PLANET/MASS' выбирает все элементы <MASS>, дочерние для элемента <PLANET>;

• '//PLANET' выбирает все элементы <PLANET>, производные от корневого узла;

• '.' выбирает текущий узел (технически это не образец выбора, а выражение XPath, как мы увидим в главе 7).

Образцы можно также использовать в атрибуте select элементов <xsl:apply- templates>, <xsl:value-of>, <xsl:for-each>, <xsl:copy-of> и <xsl:sort>; фактически атрибут select этих элементов может содержать полные выражения XPath, а не только образцы выбора. Атрибут select элемента <xsl:value-of> определяет дочерний узел, значение которого нужно получить:

<xsl:template match='PLANET'>

 <TR>

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

  <TD><xsl:value-of select='MASS'/></TD>

  <TD><xsl:value-of select='RADIUS'/></TD>

  <TD><xsl:value-of select='DAY'/></TD>

 </TR>

</xsl:template>

Теперь пора воспользоваться атрибутом select элемента <xsl:apply- templates>, поскольку это даст нам возможность указать, какой шаблон использовать и когда.

Выбор применяемого шаблона

Вплоть до нынешнего момента я использовал только версию элемента <xsl:apply- templates> по умолчанию, как, например:

<TABLE BORDER='2'>

 <TR>

  <TD>Name</TD>

  <TD>Mass</TD>

  <TD>Radius</TD>

  <TD>Day</TD>

 </TR>

 <xsl:apply-templates/>

</TABLE>

Простое использование только <xsl:apply-templates/> указывает процессору XSLT осуществлять поиск всех шаблонов, выбирающих дочерние узлы контекстного узла, — это использование по умолчанию. Однако иногда это не лучший вариант, поскольку может потребоваться применять шаблоны в определенном порядке или иным образом выбрать применяемые шаблоны (последнее можно сделать при помощи атрибута select элемента <xsl:apply-templates/>).

Например, до сих пор мы только получали значение каждого элемента <MASS>, <DAY> и <RADIUS> при помощи <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

    </Н1>

    <TABLE BORDER='2'>

     <TR>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

     </TR>

     <xsl:apply-templates/>

    </TABLE>

   </BODY>

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

0

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

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