为什么这个变量在导航中起作用而在body标签中不起作用?

时间:2013-09-23 04:41:12

标签: html xslt

我有一个名为 framework.xsl 的文件。我以前从未使用过XSL。我想给身体当前类别的类。

我在这一部分找到了可以帮助我的东西:

我看到了这一节:

<ul id="navbar">
    <xsl:for-each select="page/departments/row0">
        <li>
            <a href="main-category/{cat_slug}"><xsl:value-of select="cat_name"/></a>
            <a href="javascript:void(0)" class="arrow"></a>
            <ul>
                <xsl:for-each select="row1">
                    <li>
                        <a href="subcategory/{../cat_slug}/{sub_cat_slug}">
                            <xsl:value-of select="sub_cat_name"/>
                        </a>
                    </li>
               </xsl:for-each>
            </ul>
        </li>
    </xsl:for-each>
</ul>

变量{cat_slug}显示当前类别的名称。

所以我试着将它放在body标签中:

</head>
<body class="{cat_slug}">
    <div id="wrapper">
    <xsl:if test="$pms/pagename = 'home' and page/content/row0/f1/text()">

但没有任何反应。您只需获得<body class>

之类的内容

我做错了什么?

2 个答案:

答案 0 :(得分:1)

在没有看到代码的其余部分的情况下几乎不可能说,但是我猜想在生成body存根的时候,没有cat_slug个子来从中提取值。

答案 1 :(得分:0)

语法{cat_slug}实际上不是变量。使用$符号表示变量。花括号表示它是一个“属性值模板”,意味着它是要计算的表达式,而不是字面上的输出。

在这种情况下,查看大括号内的表达式,它将查找名为 cat_slug 的元素。这是一个相对表达式,意味着它希望 cat_slug 成为您当前所在元素的子元素。

第一次使用它是

<a href="main-category/{cat_slug}">

但是当您在 row0 元素上进行迭代时,这会发生在 xsl:for-each

<xsl:for-each select="page/departments/row0">

这表明 cat_slug row0 的子元素。由于您的<body>最有可能超出此 xsl:for-each 循环,因此它会在另一个地方查找元素 cat_slug ,其中一个位置是“存在。