| Новости | 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:, а пытается считаться с диска. Такое поведение случается только тогда, когда указан относительный путь, если указывать протокол, "домен" и базовый путь, то никаких сюрпризов не будет.