在我的网站上,我有不同类型的标题,例如h1,h2,h3。
但是,我也有这些标题的单独字幕。每个字幕样式都与原始标题的样式相关。
假设这是我的 XML 代码:
<content type="standard">
<title>That is my title</title>
<subtitle>That's my subtitle</subtitle>
<section>
<title>Great headline</title>
<subtitle>Supported by this nice subtitle</subtitle>
<para>Lorem ipsum sit dolor amet...</para>
<para>Lorem ipsum sit dolor amet...</para>
</section>
<aside>
<title>Did you know?</title>
<subtitle>I bet you didn't!</subtitle>
<para>Lorem ipsum sit dolor amet...</para>
</aside>
</content>
现在在我的 XSL 代码中,我使用特殊参数应用<title/>
:
<xsl:template match="content/section">
<!--- apply all titles in section --->
<xsl:apply-templates select=".//title">
<xsl:with-param name="role">h2</xsl:with-param>
</xsl:apply-templates>
<!--- apply all other stuff --->
<xsl:apply-templates select="*[not(self::title)]"/>
</xsl:template>
<xsl:template match="content/aside">
<!--- apply all titles in aside --->
<xsl:apply-templates select=".//title">
<xsl:with-param name="role">h3</xsl:with-param>
</xsl:apply-templates>
<!--- apply all other stuff --->
<xsl:apply-templates select="*[not(self::title)]"/>
</xsl:template>
这工作正常。但是现在,我有一个通用的字幕模板,它应该根据前面的同级标题元素应用的role
参数来决定做什么。
<xsl:template match="subtitle">
<!-- here I want to know:
what is the local-name()/class attribute
in the result tree of the preceding-sibling::title in xml
-->
</xsl:template>
这可能吗?
因此,您想区分title
元素的section
元素的子元素和aside
元素的子元素,对吗?
编写两个单独的模板,例如:
<xsl:template match="subtitle[parent::aside]">
<h3><xsl:value-of select="."/><h3>
</xsl:template>
和
<xsl:template match="subtitle[parent::section]">
<h2><xsl:value-of select="."/><h2>
</xsl:template>
此外,区分字幕的模板:
<xsl:template match="aside/subtitle">
等等。
然后,您可以完全取消参数。
编写模板的另一种方法,如 @Michael Kay 所建议的那样:
<xsl:template match="aside/title">
结果是一样的。