在我的网站上,我有不同类型的标题,例如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
param决定做什么,前面的兄弟标题元素已被应用。
<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>
这可能吗?
答案 0 :(得分:0)
因此,您希望将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">
结果是一样的。