如何检查程序第一次运行<xsl:if test="$DriverCount > 1">
语句的时间,以便程序只执行一次。它最后一次运行相同的 if 语句以便它只执行一次其他操作是什么时候?position()
并且数字不起作用,因为 if 语句并不总是在 position() = 1 上运行。我不能使用模板函数,也不能编写任何 XSL 函数,因为我正在使用 XF 设计器,并且这些关键字不能在那里使用。
XML
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<DETAILS>
<NAME>SANNIE</NAME>
<SURNAME>DELANGE</SURNAME>
</DETAILS>
<INSURANCE_ITEMS>
<VEHICLE>
<XMLDOC_VEHICLE>
<REGULAR_DRIVER_DETAILS>
<DRIVER_NAME>SAM</DRIVER_NAME>
<VEH>POLO</VEH>
</REGULAR_DRIVER_DETAILS>
</XMLDOC_VEHICLE> -<XMLDOC_VEHICLE>
<REGULAR_DRIVER_DETAILS>
<DRIVER_NAME>SANNIE</DRIVER_NAME>
<VEH>GOLF</VEH>
</REGULAR_DRIVER_DETAILS>
</XMLDOC_VEHICLE> <XMLDOC_VEHICLE>
<REGULAR_DRIVER_DETAILS>
<DRIVER_NAME>SANNIE</DRIVER_NAME>
<VEH>GOLF</VEH>
</REGULAR_DRIVER_DETAILS>
</XMLDOC_VEHICLE> <XMLDOC_VEHICLE>
<REGULAR_DRIVER_DETAILS>
<DRIVER_NAME>SAM</DRIVER_NAME>
<VEH>MAZDA</VEH>
</REGULAR_DRIVER_DETAILS>
</XMLDOC_VEHICLE>
</VEHICLE>
</INSURANCE_ITEMS>
</ROOT>
XSL
<xsl:for-each select="/ROOT/INSURANCE_ITEMS/VEHICLE/XMLDOC_VEHICLE[not(REGULAR_DRIVER_DETAILS/DRIVER_NAME = preceding-sibling::XMLDOC_VEHICLE/REGULAR_DRIVER_DETAILS/DRIVER_NAME )]">
<xsl:variable select="REGULAR_DRIVER_DETAILS/DRIVER_NAME" name="Driver"/>
<xsl:variable select="count(/ROOT/INSURANCE_ITEMS/VEHICLE/XMLDOC_VEHICLE/REGULAR_DRIVER_DETAILS[DRIVER_NAME=$Driver])" name="DriverCount"/>
<xsl:if test="$DriverCount > 1">
<xsl:value-of select="'Hello '"/>
<xsl:value-of select="REGULAR_DRIVER_DETAILS/DRIVER_NAME"/>
<xsl:value-of select="' your cars are: '"/>
<xsl:for-each select="/ROOT/INSURANCE_ITEMS/VEHICLE/XMLDOC_VEHICLE[REGULAR_DRIVER_DETAILS/DRIVER_NAME=$Driver]">
<xsl:value-of select="REGULAR_DRIVER_DETAILS/VEH"/>
<xsl:if test="$Driver = following-sibling::XMLDOC_VEHICLE/REGULAR_DRIVER_DETAILS/DRIVER_NAME">
<xsl:value-of select="' and '"/>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>