1

XMLのサンプル:

    <course>
        <department code="VES">
            <dept_short_name>Visual and Environmental Studies</dept_short_name>
        </department>
        <course_group code="course_group1">Course Group 1</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title> 
    </course>

    <course>
        <department code="MAT">
            <dept_short_name>Mathematics</dept_short_name>
        </department>
        <course_group code="course_group1">Course Group 1</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title> 
    </course>

    <course>
        <department code="VES">
            <dept_short_name>Visual and Environmental Studies</dept_short_name>
        </department>
        <course_group code="course_group2">Course Group 2</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title> 
    </course>
    <course>
        <department code="VES">
            <dept_short_name>Visual and Environmental Studies</dept_short_name>
        </department>
        <course_group code="course_group1">Course Group 1</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title> 
    </course>

私がやろうとしていること

ご覧のとおり、department@codeとcourse_group@codeはコースごとに異なる場合があります。部門コードが「VES」のコースのみを選択したいのですが、複数の異なるcourse_groupがある場合は、テンプレートを呼び出します。

このコードを試しましたが、機能しません 。$departmentというパラメーター呼び出しがあり、すでに「VES」値を渡していることに注意してください。このパラメータは機能しています。他の場所で問題なく使用しています。次のコードを試しましたが、テンプレートが何度も呼び出されます。条件が真の場合、テンプレートを1回だけ呼び出す必要があります。

<xsl:for-each-group select="course[$department = department/@code]" group-by="course_group[@code]">
            <xsl:if test="count(current-group()) > 1">
                <xsl:call-template name="anchors"/>
            </xsl:if>

</xsl:for-each-group>

提案をありがとう

4

1 に答える 1

0

学部のあるコースのみを選択したいのですが、code = "VES" 複数のコースがある場合course_groupはテンプレートを呼び出します

この変換

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
   <xsl:if test="
   distinct-values(/*/course[department
                       [@code eq 'VES']]
                           /course_group/@code
                   )[2]">
     <xsl:call-template name="myTemplate"/>
   </xsl:if>
 </xsl:template>

 <xsl:template name="myTemplate">
   myTemplate is called !
 </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用した場合:

<t>
    <course>
        <department code="VES">
            <dept_short_name>Visual and Environmental Studies</dept_short_name>
        </department>
        <course_group code="course_group1">Course Group 1</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title>
    </course>
    <course>
        <department code="MAT">
            <dept_short_name>Mathematics</dept_short_name>
        </department>
        <course_group code="course_group1">Course Group 1</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title>
    </course>
    <course>
        <department code="VES">
            <dept_short_name>Visual and Environmental Studies</dept_short_name>
        </department>
        <course_group code="course_group2">Course Group 2</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title>
    </course>
    <course>
        <department code="VES">
            <dept_short_name>Visual and Environmental Studies</dept_short_name>
        </department>
        <course_group code="course_group1">Course Group 1</course_group>
        <title>Critical Media Practice: Non Fiction Filmmaking Workshop</title>
    </course>
</t>

必要な正しい結果が生成されます:

   myTemplate is called !

今なら変更するだけです:

    <course_group code="course_group2">Course Group 2</course_group>

    <course_group code="course_group1">Course Group 1</course_group>

その場合、変換の結果は空になります-まさに希望どおりです。

于 2012-12-02T23:18:52.993 に答える