我有xml代码:
<presentation>
<slide type="title-slide" poradie="1">
<title>Here is title.</title>
<autor>Name of autor.</autor>
</slide>
</presentation>
这是我的xslt:
<xsl:template match="/presentation/slide">
<xsl:variable name="filename" select="concat('output_new/',@poradie,'.xhtml')"/>
<xsl:value-of select="$filename" />
<xsl:result-document href="{$filename}" format="xhtml">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
&css;
</style>
</head>
<body>
<div class="slide">
<xsl:apply-templates/>
</div>
</body>
</html>
</xsl:result-document>
</xsl:template>
<xsl:template match="slide[@type = 'title-slide']">
<div class="container_title_slide">
<h1><xsl:value-of select="title"/></h1>
<h3><xsl:value-of select="autor"/></h3>
</div>
</xsl:template>
所以我想为每张幻灯片创建XHTML文件。我需要将幻灯片标记匹配两次。你能救我吗?
答案 0 :(得分:1)
目前,两个模板都匹配相同的优先级,这被视为错误
您可以做的是首先为第一个模板提供更高优先级的
<xsl:template match="/presentation/slide" priority="2">
然后,在您的模板正文中,使用<xsl:next-match />
而不是<xsl:apply-templates/>
,然后使用较低的priorty应用模板(请注意,<xsl:apply-templates/>
将查找与子节点匹配的模板,无论如何都不适合在这种情况下使用。)
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml" version="2.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="/presentation/slide" priority="2">
<xsl:variable name="filename" select="concat('output_new/',@poradie,'.xhtml')"/>
<xsl:value-of select="$filename" />
<xsl:result-document href="{$filename}" format="xhtml">
<html>
<head>
<style>
&css;
</style>
</head>
<body>
<div class="slide">
<xsl:next-match />
</div>
</body>
</html>
</xsl:result-document>
</xsl:template>
<xsl:template match="slide[@type = 'title-slide']">
<div class="container_title_slide">
<h1><xsl:value-of select="title"/></h1>
<h3><xsl:value-of select="autor"/></h3>
</div>
</xsl:template>
</xsl:stylesheet>
(请注意,我将&css;
替换为&css;
,因为&css;
不是有效的XML实体。)