Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 代码从未到达_Html_Xml_Xslt - Fatal编程技术网

Html 代码从未到达

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代码:

<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区分大小写。如果纠正了套管,这两种解决方案都应该有效。