Я хотел бы создать главный шаблон в XSLT, который может быть сохранен в отдельном файле. Все другие таблицы стилей страницы совместно используют его, используя xsl: import.общий раздел стилей в XSLT
master.xslt
<xsl:template match="Page">
<html>
<head>
</head>
<body>
<call-template name="Content"/>
</body>
</html>
</xsl:template>
<xsl:stylesheet>
page.xslt
<xsl:stylesheet>
<xsl:import href="master.xslt"/>
<xsl:template match="/">
<apply-templates match="Page"/>
</xsl:template>
<xsl:template name="Content">
... apply something page-specific
</xsl:template>
</xsl:stylesheet>
page.xml
<Page>
... something page-specific
</Page>
Могу ли я улучшить это решение?
- Я не могу начать с главной таблицы стилей, потому что мне понадобится xsl: импортировать все.
- i dont want master.xslt содержит ссылки на каждую конкретную страницу.
Еще одно решение (что противоречит духу XSLT) может быть такой:
master.xslt
<xsl:template name="masterHead">
<html>
<head>
</head>
<body>
</xsl:template>
<xsl:template name=masterEnd>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
page.xslt
<xsl:stylesheet>
<xsl:import href="master.xslt"/>
<xsl:template match="/">
<call-template name=masterHead>
... apply something page-specific
<call-template name=masterEnd/>
</xsl:template>
</xsl:stylesheet>
мы не нужны общий корень <Page>
элемент.
Aa leading/на самом деле не очень хорошее решение. Значение атрибута @match является «шаблоном соответствия» и, как таковое, не обязательно должно быть абсолютным выражением XPath. К каким узлам применяется шаблон, определяется динамическим контекстом, который его выбирает. –
@Dimitre: это хорошая идея, если вы хотите, чтобы она соответствовала элементам главной страницы. –