2011-12-02 70 views
0

我旁边的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> 

但模板名称是从来没有达到过,例如我有<body></body>

我的XML结构空的HTML是:

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

可能是什么原因?

回答

1

尝试:从文档根

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

或指定节点:

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

我试过ROOT/MainNode /姓名/名称,但它并没有帮助 – Ksice

+0

@Ksice:然后尝试XPath的(第一个选项) – abatishchev

+2

记住XPath是病例敏感。如果套管更正,这两种解决方案都应该可以工作。 –

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" /> 
相关问题