xsl: Kann eine benannte Vorlage return eine Liste von Knoten?

Ich bin mit einem rekursiven template, dass die Suche nach einige spezifische Elemente, wie etwa diese:

<xsl:template name="GetProdDependency">
    <xsl:param name="TechProd"></xsl:param>
    <xsl:param name="BeatenPath"></xsl:param>
    <xsl:variable name="TechProdArch" select="$TechProd/pro:own_slot_value[pro:slot_reference='technology_product_architecture']/pro:value"></xsl:variable>
    <xsl:variable name="TechProdArchNode" select="/node()/pro:simple_instance[pro:name=$TechProdArch]"></xsl:variable>
    <xsl:variable name="TechProdCompList" select="$TechProdArchNode/pro:own_slot_value[pro:slot_reference='contained_techProd_components']/pro:value"/>
    <xsl:for-each select="$TechProdCompList">
        <xsl:variable name="TechProdAsRole" select="/node()/pro:simple_instance[pro:name=current()]/pro:own_slot_value[pro:slot_reference='technology_product_as_role']/pro:value"/>
        <xsl:variable name="TechProdRole" select="/node()/pro:simple_instance[pro:name=$TechProdAsRole]/pro:own_slot_value[pro:slot_reference='role_for_technology_provider']/pro:value"/>
        <xsl:variable name="DepTechProd" select="/node()/pro:simple_instance[pro:name=$TechProdRole]"/>
        <!-- Check for beaten Path -->
        <!-- if $DepTechProd/pro:own_slot_value[pro:slot_reference='name']/pro:value in BeatenPath -->
        <xsl:if test="not($BeatenPath[string(.)=string($DepTechProd/pro:own_slot_value[pro:slot_reference='name']/pro:value)])"> 
            <!-- Do the recursion here! -->
            <!--<xsl:value-of select="$DepTechProd/pro:own_slot_value[pro:slot_reference='name']/pro:value"/> (type: <xsl:value-of select="$DepTechProd/pro:type"/> and Class: <xsl:value-of select="$DepTechProd/pro:name"/>)-->
            <!--<xsl:value-of select="$DepTechProd/pro:own_slot_value[pro:slot_reference='name']/pro:value"/>-->
            <xsl:value-of select="$DepTechProd"/>
            <xsl:call-template name="GetProdDependency">
                <xsl:with-param name="TechProd" select="$DepTechProd"></xsl:with-param>
                <xsl:with-param name="BeatenPath" select="$TechProd|$DepTechProd/pro:own_slot_value[pro:slot_reference='name']/pro:value"></xsl:with-param>
                <xsl:with-param name="Rev" select="$Rev + 1"></xsl:with-param>
            </xsl:call-template>
        </xsl:if>
    </xsl:for-each>
</xsl:template> 

Dies ist in Ordnung, die in der Suche etc.

Aber wenn ich das Ergebnis bekommen, das in den ursprünglichen Aufrufer, ich hatte erwartet, um eine Liste von Knoten aus dem Aufruf.

Nenne ich es gerne:

<xsl:variable name="DelPlist">
<xsl:call-template name="GetProdDependency">
    <xsl:with-param name="TechProd" select="$TechProd"></xsl:with-param>
    <xsl:with-param name="BeatenPath" select="$TechProd/pro:own_slot_value[pro:slot_reference='name']/pro:value"></xsl:with-param>
    <xsl:with-param name="Rev" select="1"></xsl:with-param>
</xsl:call-template>
</xsl:variable>

Und ich hatte erwartet, um eine Liste der Knoten, die ich können Durchlaufen mit <xsl:for-each>. Aber Wenn ich die Option für die count($DelPlist) bekomme ich 1 als Ergebnis, und ich kann nicht Durchlaufen.

Kann jemand helfen?

InformationsquelleAutor Kangkan | 2012-01-03
Schreibe einen Kommentar