[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: =?koi8-r?B?UmU6IFJlOiDUxdLNyc7Z?=
> From: "Serge Shikov" <shikov@rinet.ru>
>
> P.S. Кстати, если XSL считать программой, кто бы мог просветить - как
> без написания скриптов сделать простую вещь: содержимое всех тэгов
> <price> умножить на некий коэффициент, скажем перевести в другую валюту
> (в соответствии с атрибутом currency="..." например, а само число взять
> скажем из другого XML-документа). Как со скриптами - это я знаю, это у
> MS для MSIE5 описано.
>
Мой пример будет слегка кривой, потому что в XT, которым я пользуюсь
не реализована функция document(), позволяющая доступаться к другим
документам.
Пусть есть документ, содержащий цены и таблицу курсов:
<alldata>
<!-- таблица цен -->
<prices>
<price item="Foo" value="12.00" currency="USD" />
<price item="Bar" value="77.00" currency="RUB" />
</prices>
<!-- таблица курсов -->
<rates>
<rate name="USD" value="24.20" />
<rate name="RUB" value= "1.00" />
</rates>
</alldata>
Пишем следующее:
----------------------------------------------------------------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="/">
<prices>
<xsl:apply-templates/>
</prices>
</xsl:template>
<xsl:template match="price">
<xsl:variable name="curname" select="@currency" />
<xsl:variable name="rate"
select="/alldata/rates/rate[@name=$curname]/@value" />
<price item = "{@item}"
foo = "{@value * $rate}" />
</xsl:template>
<xsl:template match="rates">
</xsl:template>
</xsl:stylesheet>
----------------------------------------------------------------------
Если бы работала функция document, можно было вместо
/alldata/rates/rate
написать
document('some URI')/rates/rate
Воот. И никаких скриптов!
--бо
--
bo berkhaut
http://www.syntext.com
--