我有下一个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>
我的XML结构是:
<ROOT>
<MainNode>
<NAMES>
<NAME></NAME>
</NAMES>
</MainNode>
</ROOT>
可能是什么原因?
答案 0 :(得分:2)
问题在于您调用apply-templates
的范围。您位于根模板中,这意味着当前上下文(XML中的位置)是根元素。将select
与apply-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" />