Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Вячеслав 31.05.2006 19:33
Установлен парсер 3.2.1sp1 (compiled on i386-pc-win32)# index.html @auto[] $response:content-type[text/xml] @main[] $doc[^xdoc::load[parser://dynamic_doc/root.xml]] $transformed_doc[^doc.transform[template.xsl]] ^transformed_doc.string[] @dynamic_doc[url] $result[<include href="next/doc.xml" base="$url"/>]
<!-- template.xsl --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="depth" select="2"/> <xsl:template match="include"> <!-- атрибут base используется только как отладочная информация, сам документ запрашивается по относительному пути --> <doc base="{@base}"> <xsl:if test="$depth > 0"> <xsl:apply-templates select="document(@href)"> <xsl:with-param name="depth" select="$depth - 1"/> </xsl:apply-templates> </xsl:if> </doc> </xsl:template> </xsl:stylesheet>Приведенный код в таком виде работает как положено. Но если аргумент функции document() будет браться не напрямую, а вычисляться, например:
document(string(@href)) document(substring(сoncat('asdf', @href), 5))) ...то документ почему-то уже запрашивается не по протоколу parser:, а пытается считаться с диска. Такое поведение случается только тогда, когда указан относительный путь, если указывать протокол, "домен" и базовый путь, то никаких сюрпризов не будет.