РНР 5 в подлиннике

Страница 485 из 554


Гпава 42. Расширение XSL Т

979

<xsl:call-template name="set:difference">

<xsl:with-param name="nodesl" select="node-set" /> <xsl:with-param name="nodes2" select="node-set" /> </xsl:call-template>

□ node-set set:intersection(node-setl, node-set2) — функция возвращает узлы, входящие и в node-setl, и в node-set2. Функция может быть вызвана как именованный шаблон:

<xsl:call-template name="set:intersection">

<xsl:with-param name="nodesl" select="node-set" /> <xsl:with-param name="nodes2" select="node-set" /> </xsl:call-template>

□ node-set set: distinct (node-set) — функция возвращает СПИСОК узлов, имеющих разные значения. Если в node-set существуют узлы с одинаковыми значениями, то в результат включается только первый из этих узлов. Функция может быть вызвана как именованный шаблон:

<xsl:call-template name="set:distinct">

<xsl:with-param name="nodes" select="node-set" /> </xsl:call-template>

□ boolean set:has-same-node(node-setl, node-set2) — функция возвращает значение

true, если node-setl и node-set2 имеют общие узлы. Функция может быть вызвана как именованный шаблон:

<xsl:call-template name="set:has-same-node">

<xsl:with-param name="nodes" select="node-set" /> <xsl:with-param name="node" select="node-set" /> </xsl:call-template>

□ node-set set: leading (node-setl, node-set2) — функция возвращает СПИСОК узлов node-setl, которые предшествуют первому узлу node-set2. Функция может быть вызвана как именованный шаблон:

<xsl:call-template name="set:leading"> <xsl:with-param name="nodes" select="node-set" /> <xsl:with-param name="node" select="node-set" /> </xsl:call-template>

□ node-set set: trailing (node-setl, node-set2) — функция возвращает СПИСОК узлов node-setl, которые следуют после первого узла node-set2.

<xsl:call-template name="set:trailing">

<xsl:with-param name="nodes" select="node-set" /> <xsl:with-param name="node" select="node-set" /> </xsl:call-template>

В качестве демонстрации возможностей функций модуля sets рассмотрим XML-файл htmltags.xml (листинг 42.39).

980

Часть VI. XML в РНР 5

\ Листинг 42.39. Файл htmltags.xml описания атрибутов HTML-тегов

<tags>

<img src='uri' width='number' height='number' alt='string'/>

<table width='...' height='...'/>

<script src='uri'/>

<frame src='uri'/>

<iframe src='uri'/>

<hr width='number'/>

<td width='number' height='number1/>

<th width='number' height='number'/>

<tr width='number' height='number'/>

</tags>

В файле описаны атрибуты некоторых HTML-тегов.

Рассмотрим EXSLT-программу, отображающую списки HTML-тегов, имеющих атрибуты src, width, src И width, src без width И width без src (ЛИСТИНГ 42.40).

i Листинг 42.40. Пример использования функций модуля sets

<?xml version='1.0' encoding='KOI8-R'?> <xsl:stylesheet version='1.0'

xmlns:set—"http://exslt.org/sets"

extension-element-prefixes="set"

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

<xsl:output method="xml" encoding="KOI8-R" indent="yes"/>

<xsl:variable name="src"

select="//*[@src]" /> <xsl:variable name="width"

select="//*[Swidth]" /> <xsl:template match="/"> <out>

<div>

Теги, имеющие атрибут src:

<xsl:for-each select="$src">

<xsl:call-template name='showlist'/> </xsl:for-each> </div> <div>

Теги, имеющие атрибут width:

<xsl:for-each select="$width">

<xsl:call-template name='showlist'/> </xsl:for-each> </div> <div>

Теги, имеющие атрибуты src и width:

<xsl:for-each select="set:intersection($src, Swidth)">

<xsl:call-template name='showlist'/> </xsl:for-each>




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006