XSLT:在当前的处理方式中使用不同的处理方式

时间:2010-05-03 15:13:21

标签: xslt templates process

下面我试图匹配某些节点。

<xsl:template match="nodes">    
    <element>
        <xsl:apply-templates select="nodes" mode="different" />
    </element>
</xsl:template>

现在,有多种方法可以处理相同的节点。我想用这种不同的方式处理当前的处理方式。这就是为什么我对同一个选项apply-templates执行nodes,但mode现在不同了。

以下是不同模式的外观:

    <xsl:template match="nodes" mode="different">
<!-- another way of processing these nodes -->
</xsl:template>

现在,这不起作用。仅处理第一种处理类型,并且不会应用apply-templates调用。

更具体一点:

<xsl:template match="Foundation.Core.Association.connection">
    <xsl:for-each select="Foundation.Core.AssociationEnd">
        <someElement>
                <xsl:apply-templates select="Foundation.Core.Association.connection" mode="different" />
        </someElement>      
    </xsl:for-each>
</xsl:template>

如您所见,我选择Foundation.Core.Association.connection。当然这是错误的,但是如果给出当前元素和位置,我该如何引用这个元素呢?鉴于Derek的评论,应该这样做。

我做错了什么,如何使用XSLT得到我想要的东西?什么是解决这个问题的另一种方法?

感谢。

2 个答案:

答案 0 :(得分:1)

如果“nodes”指的是包含匹配项中相同的精确节点集,请尝试:

<xsl:template match="nodes">    
    <element>
        <xsl:apply-templates select="." mode="different" />
    </element>
</xsl:template>

答案 1 :(得分:0)

<xsl:template match="Foundation.Core.Association.connection">

    <xsl:for-each select="Foundation.Core.AssociationEnd">

        <someElement> 
                <xsl:apply-templates
     

选择= “Foundation.Core.Association.connection”   mode =“different”/&gt;               
                  

     

如你所见,我选择了   Foundation.Core.Association.connection。   当然这是错的,但我该怎么做   参考这个元素   当前元素和位置?

使用

<xsl:apply-templates select=".." mode="different" />

您要以不同方式处理的元素是当前节点的父级

当然,如果你能够显示更多的XML文档并以更加简洁的方式表达问题,那么很可能完全没有必要进行这种错综复杂的处理,这将得到证实。