У меня есть следующий цикл шаблона xsl (рекурсивный), который вызывает функцию VBScript, которая принимает один параметр, который представляет номер физического жесткого диска, и получает информацию о диске:
<xsl:template name="for.loop.Drives">
<xsl:param name="i" select ="0" />
<xsl:param name="count" />
<!--begin_: Line_by_Line_Output -->
<xsl:if test="$i <= $count">
<xsl:value-of select="nunit2report2:GetDiskDrives($i)"/>
</xsl:if>
<!--begin_: RepeatTheLoopUntilFinished-->
<xsl:if test="$i <= $count">
<xsl:call-template name="for.loop.Drives">
<xsl:with-param name="i">
<xsl:value-of select="$i + 1"/>
</xsl:with-param>
<xsl:with-param name="count">
<xsl:value-of select="$count"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
Функция VBScript (которую я проверял, работает):
Function GetDiskDrives(drivenumber)
strComputer = "."
objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive")
'For Each objItem in colItems
DiskDriveInfo = DiskDriveInfo & "Name: " & colItems.ItemIndex(drivenumber).Name & _
" -- Model: " & colItems.ItemIndex(drivenumber).Model & _
" -- Status: " & colItems.ItemIndex(drivenumber).Status & _
" -- Size: " & Int(colItems.ItemIndex(drivenumber).Size /(1073741824)) & " GB" & _
" -- Number of Partitions: " & colItems.ItemIndex(drivenumber).Partitions
'Next
GetDiskDrives = DiskDriveInfo
End Function
Возвращенная ошибка - несоответствие типа.Это связано с $ i, переданным функции:
<xsl:if test="$i <= $count">
<xsl:value-of select="nunit2report2:GetDiskDrives($i)"/>
</xsl:if>
Когда я делаю это, это работает, но я явно передаю 1. 1. 1012 *
<xsl:if test="$i <= $count">
<xsl:value-of select="nunit2report2:GetDiskDrives(1)"/>
</xsl:if>
Iпопытался преобразовать переданный в $ i в целое число в VBScript, используя
drivenum = CInt(drivenumber)
, но приведенное выше приведение возвращает следующую ошибку:
System.InvalidCastException: Conversion from type 'XPathDocumentNavigator' to type 'Integer' is not valid.
Кто-нибудь знает, как я могу получить этот вызов правильно?Я использую xslt 1.0