从 XSLT 中访问结果树



在我的网站上,我有不同类型的标题,例如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">

结果是一样的。

相关内容

  • 没有找到相关文章

最新更新