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>

我想做什么

如您所见,部门@code 和 course_group @code 可能因每门课程而异。我只想选择部门代码=“VES”的课程,如果他们有多个不同的 course_group 调用模板

尝试了此代码但它不起作用 请注意,我有一个参数调用 $department 它已经传递了“VES”值。这个参数正在工作,我在其他地方使用它没有问题。我尝试了以下代码,但它多次调用模板,如果条件为真,我只需要调用一次模板。

<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 回答