在XSL中计算具有特定子节点的节点

时间:2016-06-14 20:01:38

标签: xslt

我有一些XSL,我需要为每个具有特定子节点的人做一个特定的操作,除了那个类型的最后一个:

<xsl:for-each select="/FormData/Persons/Person">
                <xsl:if test="MySpecificType">
                    <!--Header-->
                    <xsl:call-template name="Header"/>

                    <!--Body-->
                    <xsl:call-template name="Person"/>
                    <xsl:if test="position() != last()">
                        <!-- Specific logic -->
                    </xsl:if>
                </xsl:if>
            </xsl:for-each>

if posiition()!= last的测试只捕获他是不是最后一个人,我真正想要捕获的是他是不是特定类型的最后一个人。

有没有办法计算有多少人拥有该子节点,然后在我的内部检查if?或者可能只是通过这个节点来预告人们?

xml看起来像:

<Person><Name /><SpecificType><OtherInfo /></SpecificType></Person>

我不想捕获的节点不包含SpecificType节点。

2 个答案:

答案 0 :(得分:1)

使用谓词<xsl:for-each select="/FormData/Persons/Person[MySpecificType]">代替xsl:if

答案 1 :(得分:1)

  

我需要为每个具有特定功能的人执行特定操作   子节点

  

有没有办法计算有多少人有这个   子节点

计算节点是一回事;处理节点是另一个。

要计算合格节点,您可以执行以下操作:

<xsl:value-of select="count(/FormData/Persons/Person[MySpecificType]"/>

要处理它们,请执行以下操作:

<xsl:for-each select="/FormData/Persons/Person[MySpecificType]">
    <!-- do something -->
   <xsl:if test="position() != last()">
        <!-- do something extra -->
    </xsl:if>
</xsl:for-each>