代码从未到达

时间:2011-12-02 07:03:07

标签: html xml xslt

我有下一个xsl代码:

<xsl:template match="/">
    <html>
       <!--some code here-->
     <body bgcolor="#FFFFFF">
         <xsl:apply-templates select="NAME" />
     </body>
    </html>
</xsl:template>        
<xsl:template name="NAME" match="NAME">
  <!--some code here-->
</xsl:template>

但是从未到达模板NAME,例如我有<body></body>

的空HTML

我的XML结构是:

<ROOT>
    <MainNode>
        <NAMES>
            <NAME></NAME>
        </NAMES>
    </MainNode>
</ROOT>

可能是什么原因?

2 个答案:

答案 0 :(得分:2)

问题在于您调用apply-templates的范围。您位于根模板中,这意味着当前上下文(XML中的位置)是根元素。将selectapply-templates一起使用时,XPath基于当前上下文/位置。

在您的情况下,您将模板应用于根目录中的所有NAME元素。由于不存在,因此永远不会调用您的NAME模板。正如已经建议的那样,假设结构,拼写和大小写在您的示例中是正确的,则以下内容应该有效:

<xsl:apply-templates select="ROOT/MainNode/NAMES/NAME" />

或者,此XPath应该可以在文档中的任何位置工作,因为它的行为类似于从文档根开始的绝对路径:

<xsl:apply-templates select="/ROOT/MainNode/NAMES/NAME" />

答案 1 :(得分:1)

尝试:

<xsl:apply-templates select="//Name" />

或从文档根目录指定节点:

<xsl:apply-templates select="ROOT/MainNode/Names/Name" />