XSLT在HTML文档的不同位置以不同方式处理相同的XML节点

时间:2016-07-06 12:20:20

标签: html xml xslt

我想在HTML文档的顶部创建一个用于创建目录的模板,我希望能够单击此表中的每个项目以获取有关它的更多详细信息,也就是说,它跳转到文档中更下面的相应详细部分。

类似:

  

目录:

     

Node1(单击此按钮将转到下面的粗体Node1)

     

Node2

     

节点3

     

其他东西......

     

Node1

     

描述:blah

     

内容:1.55

     

版本:1.55

粗糙的XSLT代码:

// create table of contents
<table border="1">
<tr bgcolor="#9acd32">
    <th style="text-align:left">Name</th>
</tr>
<xsl:for-each select="">
    <xsl:apply-templates select="my_node"/>
</xsl:for-each>

// do other stuff

// create detailed view (code omitted because I don't know how yet)

// template for node
<xsl:template match="my_node">
    <tr>
        <td><xsl:value-of select="../@name"/></td>
    </tr>
</xsl:template>

我的问题是我想要处理这个节点两次但在我的代码中的不同位置,一个我只是抓住名字,一个我抓住它的所有信息。据我了解,每个节点都有一个模板是XSLT中的首选实践。我怎样才能实现我在这里描述的内容?

我是否通过一个布尔参数的类型来确定在模板中采取哪种操作?或者为父节点编写模板并在第一种情况下遍历到名称?我不确定我喜欢其中任何一个。

1 个答案:

答案 0 :(得分:1)

使用 modes 。大致是:

<xsl:template match="/">

    <!--  create table of contents -->
    <table border="1">
        <tr bgcolor="#9acd32">
            <th style="text-align:left">Name</th>
        </tr>
        <xsl:apply-templates select="my_node" mode="toc"/>
    </table>

    <!-- do other stuff -->

    <!-- create detailed view  -->
    <h1>Details</h1>
    <xsl:apply-templates select="my_node"/>
</xsl:template>

<xsl:template match="my_node" mode="toc">
    <tr>
        <td><xsl:value-of select="../@name"/></td>
    </tr>
</xsl:template>

<xsl:template match="my_node">
    <!-- whatever is required for detailed view -->
</xsl:template>

P.S。将xsl:for-eachxsl:apply templates混合时要小心。在大多数情况下,您希望使用其中一种。