我有一些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节点。
答案 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>