Html 代码从未到达
我有下一个xsl代码:Html 代码从未到达,html,xml,xslt,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 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>
但模板名从未到达,例如,我有空HTML,带有
我的XML结构是:
<ROOT>
<MainNode>
<NAMES>
<NAME></NAME>
</NAMES>
</MainNode>
</ROOT>
原因可能是什么?试试:
<xsl:apply-templates select="//Name" />
或从文档根目录中指定节点:
<xsl:apply-templates select="ROOT/MainNode/Names/Name" />
试试:
或从文档根目录中指定节点:
<xsl:apply-templates select="ROOT/MainNode/Names/Name" />
问题在于调用
应用模板的范围。您位于根模板中,这意味着当前上下文(XML中的位置)是根元素。当您将select
与apply templates
一起使用时,XPath基于当前上下文/位置
在本例中,您将模板应用于根目录中的所有NAME
元素。由于不存在,因此永远不会调用您的名称
模板。如前所述,假设您的示例中的结构、拼写和大小写正确,以下内容应该可以使用:
<xsl:apply-templates select="ROOT/MainNode/NAMES/NAME" />
或者,此XPath应该在文档中的任何位置工作,因为它的行为类似于从文档根开始的绝对路径:
<xsl:apply-templates select="/ROOT/MainNode/NAMES/NAME" />
问题在于调用应用模板的范围。您位于根模板中,这意味着当前上下文(XML中的位置)是根元素。当您将select
与apply templates
一起使用时,XPath基于当前上下文/位置
在本例中,您将模板应用于根目录中的所有NAME
元素。由于不存在,因此永远不会调用您的名称
模板。如前所述,假设您的示例中的结构、拼写和大小写正确,以下内容应该可以使用:
<xsl:apply-templates select="ROOT/MainNode/NAMES/NAME" />
或者,此XPath应该在文档中的任何位置工作,因为它的行为类似于从文档根开始的绝对路径:
<xsl:apply-templates select="/ROOT/MainNode/NAMES/NAME" />
@Ksice:然后尝试XPath(第一个选项)记住XPath是区分大小写的。如果大小写正确,这两种解决方案都应该有效。@Ksice:然后尝试XPath(第一个选项)记住XPath区分大小写。如果纠正了套管,这两种解决方案都应该有效。