如何获取当前节点变量的父节点元素?

时间:2012-01-20 11:40:47

标签: xml xslt xpath parent

以下是我的xslt:

 <xsl:template match="/">
            <xsl:call-template name="generateLinks">
        <xsl:with-param name="currentPageBranchVariable" select="//Item[@CurrentPageBranch='true']"></xsl:with-param>
      </xsl:call-template>

  </xsl:template>

  <xsl:template name="generateLinks">
    <xsl:param name="currentPageBranchVariable"></xsl:param>

    <xsl:value-of select="$currentPageBranchVariable/@FullName"/>

    // how to get the parent node of $currentPageBranchVariable?

  </xsl:template>

可以看出,$ currentPageBranchVariable是包含Item节点的第二个模板的变量。

如何才能从那里获取其父元素?

我尝试了以下但没有奏效:

<xsl:value-of select="../$currentPageBranchVariable/@FullName"/>
<xsl:value-of select="parent::node()/$currentPageBranchVariable/@FullName"/>
<xsl:value-of select="parent($currentPageBranchVariable)/@FullName"/>

希望问题很明确。

也许我想做的事情是不可能的?

谢谢,

2 个答案:

答案 0 :(得分:5)

  

$currentPageBranchVariable是第二个模板的变量   其中包含Item节点。

     

如何才能从那里获取其父元素?

只需使用

$currentPageBranchVariable/..

这将选择$currentPageBranchVariable中包含的所有节点(在这种情况下只有一个)的父组(每组一个)。

答案 1 :(得分:2)

你把轴放在了错误的位置。

您的表达式选择了上下文节点的父节点,而不是$currentPageBranchVariable。由于您通过/上的匹配调用了模板,因此没有父级可以从中选择@FullName

您需要通过使用该变量之后的父轴来选择$currentPageBranchVariable中的父级,而不是之前。

其中任何一个都可以。

    <xsl:value-of select="$currentPageBranchVariable/../@FullName" />
    <xsl:value-of select="$currentPageBranchVariable/parent::*/@FullName" />