xslt include / import path - PullRequest
       2

xslt include / import path

1 голос
/ 26 июля 2011

Я использую XSLT в качестве движка шаблонов в моей среде PHP.Некоторые файлы XSLT находятся в разных папках, поэтому, если я хочу включить / импортировать шаблон xslt не из основного каталога, я должен набрать много:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">   
    <xsl:import href="dir1/dir2/dir3/dir4/layout.xsl"/> 

    <xsl:template name="content">
        <html>
            <head>
                <title>action.xsl</title>
            </head>
            <body>
                test
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

Есть ли простой способ уменьшить это dir1/dir2/dir3/dir4/layout.xsl?dir1/dir2/dir3/dir4/ являются статическими (никогда не меняются).

Отдельный шаблон со всеми включениями не подходит, потому что для каждого шаблона требуются разные файлы, и через некоторое время трудно понять, что включено и где.

Я думал, что, возможно, что-то можно сделать с xml:base <xsl:import href="layout.xsl" xml:base="dir1/dir2/dir3/dir4/" />, но не знаю как.

Спасибо

Ответы [ 2 ]

1 голос
/ 26 июля 2011
<xsl:import href="layout.xsl" xml:base="dir1/dir2/dir3/dir4/" />

возможно в XSLT 2.0, но не в 1.0.

Вы пробовали это в XSLT 2.0 (например, в Saxon), и если да, каков был результат?

Нельзя помещать операторы импорта в шаблоны; каждый оператор импорта должен находиться на верхнем уровне ниже элемента таблицы стилей.

1 голос
/ 26 июля 2011

[XSLT 1.0]

Вы не можете использовать, например, xsl:import, например:

 <xsl:import href="$mypath"/>

потому что href всегда вычисляется как строка. AVT также не допускается.


Одним из возможных решений является определение конкретной таблицы стилей в целевой папке , которая обеспечивает все необходимые операции импорта (и в этой таблице стилей вам потребуются простые относительные пути). Таким образом, основной xsl потребуется импортировать только эту конкретную таблицу стилей.

Например, transformA.xsl импортирует ir1/dir2/dir3/dir4/transformA_imports.xsl, который импортирует все необходимые файлы, такие как layout.xsl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...