2013-05-13 75 views
0

在新课标下此XSLT:如何指示XSLT仅将模板应用于儿童?

<xsl:template match="e"> 
    <xsl:value-of select="@name"/> 
</xsl:template> 

为了这个XML:

<root> 
    <e name="1"/> 
    <la> 
     <e name="bla"/> 
    </la> 
    </root> 

我得到两个 “1” 和 “喇嘛”。

  1. 为什么会这样呢?
  2. 如何确保XSLT仅适用于root的直接子项?
+2

你试过'match =“root/e”'吗? – rsp 2013-05-13 08:42:01

+0

当您应用此XSLT时: 您在说xslt:将模板应用于所有 xml元素,这就是为什么您在输出 – Draykos 2013-05-13 08:44:51

+0

@rsp中有2个节点,发布了答案并且我会接受。谢谢。 – Vitaliy 2013-05-21 12:57:38

回答

1

你尝试match="root/e"?如果要在特定上下文中匹配节点,则需要在规则中提供上下文,否则具有匹配节点名称的所有节点都将应用于该规则。

0

您也可以使用这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="root"> 
    <xsl:apply-templates select="child::e"/> 
    </xsl:template> 

    <xsl:template match="e"> 
    <xsl:value-of select="@name"/> 
    </xsl:template> 

</xsl:stylesheet>