2013-05-13 35 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>