Kuzya
07.05.2009, 09:03
Есть xml-документ представляющий из себя что-то типа древа файлов.
Пример:
<root>
<dir name="dir1" />
<dir name="dir2" />
<dir name="dir3" >
<file name="file1.ext" />
<file name="file2.ext" />
<file name="file3.ext" />
<dir name="dir4" >
<file name="file4.ext" />
</dir>
</dir>
</root>
Как видите - описаны директории и входящие в них файлы/папки. Нужно каким то образом с помощью XSLT привести эту информацию в HTML-вид с сохранением порядка расположения в документе. Я попробовал следующие правила (пишу на память)
<xsl:tempate match="dir">
<b><xsl:apply-templates /></b>
</xsl:template>
<xsl:tempate match="file">
<i><xsl:apply-templates /></i>
</xsl:template>
Типа все директории выделяем жирным,а файлы - курсивом. Но так обрабатываются только корневые элементы. Вложенные же остаются без внимания. Появилась идея обходить через for-each-конструкцию каждый тег и проверять есть ли в нём вложенные элементы. Если есть то проверять эти элементы так же с помощью for-each и т.д. То есть что-то типа рекурсии с for-each. Но как это сделать ума не приложу. Если можно было бы описывать в XSLT что ни будь типа функций то проблема решилась бы сразу. Порылся в книжках по XML+XSLT, но не нашёл ничего нужного. Может я вообще не в том направлении копаю, или просто знаний мало? Помогите пожалуйста разобраться.
Пример:
<root>
<dir name="dir1" />
<dir name="dir2" />
<dir name="dir3" >
<file name="file1.ext" />
<file name="file2.ext" />
<file name="file3.ext" />
<dir name="dir4" >
<file name="file4.ext" />
</dir>
</dir>
</root>
Как видите - описаны директории и входящие в них файлы/папки. Нужно каким то образом с помощью XSLT привести эту информацию в HTML-вид с сохранением порядка расположения в документе. Я попробовал следующие правила (пишу на память)
<xsl:tempate match="dir">
<b><xsl:apply-templates /></b>
</xsl:template>
<xsl:tempate match="file">
<i><xsl:apply-templates /></i>
</xsl:template>
Типа все директории выделяем жирным,а файлы - курсивом. Но так обрабатываются только корневые элементы. Вложенные же остаются без внимания. Появилась идея обходить через for-each-конструкцию каждый тег и проверять есть ли в нём вложенные элементы. Если есть то проверять эти элементы так же с помощью for-each и т.д. То есть что-то типа рекурсии с for-each. Но как это сделать ума не приложу. Если можно было бы описывать в XSLT что ни будь типа функций то проблема решилась бы сразу. Порылся в книжках по XML+XSLT, но не нашёл ничего нужного. Может я вообще не в том направлении копаю, или просто знаний мало? Помогите пожалуйста разобраться.