2010-06-18 3 views
0

Я новичок в xslt. Я попытался использовать urn: helper в теге stylesheet. Но это вызывает следующую ошибку.
«Не удается найти скрипт или внешний объект, который реализует префикс« urn: Helper ».Использование urn: helper in xsl

Ниже приведен фрагмент, используемый в моем коде.


xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:myObj="urn:Helper" 
xmlns:t="http://microsoft.com/schemas/VisualStudio/TeamTest/2006" 

Я что-то не хватает?

Спасибо ..

редактировать: полная таблица стилей

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:myObj="urn:Helper" 
xmlns:t="http://microsoft.com/schemas/VisualStudio/TeamTest/2006"> 
    <xsl:param name="today"></xsl:param> 
    <xsl:param name="results"></xsl:param> 
    <xsl:param name="pass" select="'Passed'"/> 
    <xsl:param name="fail" select="'Failed'"/> 
    <xsl:key name="class-key" match="@className" use="."/> 
    <xsl:variable name="unique-classes" select="//t:TestMethod/@className[generate-id(.) =generate-id(key('class-key',.))]" /> 
    <xsl:template match="/"> 

    <html> 
     <body style="font-family:Verdana; font-size:10pt"> 
     <h1>Test Results Summary</h1> 
      <table style="font-family:Verdana; font-size:10pt"> 
     <tr> 
     <td> 
      <b>Run Date/Time</b> 
     </td> 
     <td> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      Start Time: 
     </td> 
     <td> 
       <xsl:value-of select="myObj:DateTimeToString(//t:TestRun/t:Times/@start)"/> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      End Time: 
     </td> 
     <td> 
       <xsl:value-of select="myObj:DateTimeToString(//t:TestRun/t:Times/@finish)"/> 
     </td> 
     </tr> 
     <tr> 
      <td> 
      Duration: 
      </td> 
      <td> 
       <xsl:value-of select="myObj:TimeSpan(//t:TestRun/t:Times/@start,//t:TestRun/t:Times/@finish)"/> 
     </td> 

     </tr> 
     <tr> 
     <td> 
      <b>Results File</b> 
     </td> 
     <td> 
       <xsl:value-of select="$results"/> 
     </td> 
     </tr> 
    </table> 
    <a href="coverage.htm">Coverage Summary</a> 
    <xsl:call-template name="summary" /> 
     <!--<xsl:call-template name="details" />--> 
     <xsl:call-template name="details2" /> 
    </body> 
</html> 
    </xsl:template> 

    <xsl:template name="summary"> 
    <h3>Test Summary</h3> 
    <table style="width:640;border:1px solid black;font-family:Verdana; font-size:10pt"> 
    <tr> 
    <td style="font-weight:bold">Total</td> 
    <td style="font-weight:bold">Failed</td> 
    <td style="font-weight:bold">Passed</td> 
    <td style="font-weight:bold">Inconclusive</td> 
    </tr> 

    <tr> 
    <td > 
     <xsl:value-of select="/t:TestRun/t:ResultSummary/t:Counters/@total"/> 
    </td> 
    <td style="background-color:pink;"> 
     <xsl:value-of select="/t:TestRun/t:ResultSummary/t:Counters/@failed"/> 
    </td> 
    <td style="background-color:lightgreen;"> 
     <xsl:value-of select="/t:TestRun/t:ResultSummary/t:Counters/@passed"/> 
    </td> 
    <td style="background-color:yellow;"> 
     <xsl:value-of select="/t:TestRun/t:ResultSummary/t:Counters/@inconclusive"/> 
    </td> 
    </tr> 
</table> 

    </xsl:template> 

    <xsl:template name="details"> 

<h3>Unit Test Results</h3> 
<table style="width:640;border:1px solid black;font-family:Verdana; font-size:10pt;"> 
    <tr> 
    <td style="font-weight:bold">Test Name</td> 
    <td style="font-weight:bold">Result</td> 
    <td style="font-weight:bold">Duration</td> 
    </tr> 
    <xsl:for-each select="/t:TestRun/t:Results/t:UnitTestResult"> 
    <xsl:sort select="@testName"/> 
    <tr> 
     <xsl:attribute name="style"> 
     <xsl:choose> 
      <xsl:when test="@outcome='Failed'">background-color:pink;</xsl:when> 
      <xsl:when test="@outcome='Passed'">background-color:lightgreen;</xsl:when> 
      <xsl:otherwise>background-color:yellow;</xsl:otherwise> 
     </xsl:choose> 
     </xsl:attribute> 
     <td> 
     <xsl:value-of select="@testName"/> 
     </td> 
     <td> 
     <xsl:choose> 
      <xsl:when test="@outcome='Failed'">FAILED</xsl:when> 
      <xsl:when test="@outcome='Passed'">Passed</xsl:when> 
      <xsl:otherwise>Inconclusive</xsl:otherwise> 
     </xsl:choose> 
     </td> 
     <td> 
     <xsl:value-of select="@duration"/> 
     </td> 
    </tr> 
    </xsl:for-each> 
</table> 
    </xsl:template> 

    <xsl:template name="details2"> 

<h3>Unit Test Results</h3> 
<table border="0" style="width:640;border:1px solid black;font-family:Verdana; font-size:10pt;"> 
    <xsl:for-each select="$unique-classes"> 
    <xsl:sort /> 
    <xsl:variable name="curClass" select="."/> 
    <xsl:variable name="return" select="myObj:GetClassInformation($curClass)"/> 
    <!--<xsl:for-each select="//TestRun/tests/value/testMethod[className=$curClass]">--> 

    <tr> 
     <td valign="bottom" style="background-color:beige;font-weight:bold;" colspan="3"> 
     <font> 
      <xsl:value-of select="concat('',$return/className)"/> 
     </font> 
     </td> 
    </tr> 
    <tr> 
     <td style="font-weight:bold">Test Name</td> 
     <td style="font-weight:bold">Result</td> 
     <td style="font-weight:bold">Duration</td> 
    </tr> 
     <xsl:for-each select="//t:UnitTest/t:TestMethod[@className=$curClass]"> 
     <xsl:sort select="@name"/> 
     <xsl:variable name="testid" select="../@id"/> 
     <xsl:for-each select="//t:UnitTestResult[@testId=$testid]"> 
     <xsl:call-template name="classRunsDetail"> 
     <xsl:with-param name="testid" select="."/> 
     </xsl:call-template> 
     </xsl:for-each> 
    </xsl:for-each> 
    <tr> 
     <td style="border-bottom:0px solid black;height:1px;background-color:black" colspan="3"></td> 
    </tr> 

    </xsl:for-each> 
</table>  
    </xsl:template> 

    <xsl:template name="classRunsDetail"> 
    <xsl:param name="testid"/> 
    <tr> 
     <xsl:attribute name="style"> 
     <xsl:choose> 
      <xsl:when test="@outcome = $fail">background-color:pink;</xsl:when> 
      <xsl:when test="@outcome = $pass">background-color:lightgreen;</xsl:when> 
      <xsl:otherwise>background-color:yellow;</xsl:otherwise> 
     </xsl:choose> 
     </xsl:attribute> 
     <td> 
     <xsl:value-of select="@testName"/> 
     </td> 
     <td> 
     <xsl:choose> 
      <xsl:when test="@outcome = $fail">FAILED</xsl:when> 
      <xsl:when test="@outcome = $pass">Passed</xsl:when> 
      <xsl:otherwise>Inconclusive</xsl:otherwise> 
     </xsl:choose> 
     </td> 
     <td> 
     <xsl:value-of select="@duration"/> 
     </td> 
    </tr> 

    </xsl:template> 

</xsl:stylesheet> 
+0

Предоставьте полный листок, пожалуйста. – 2010-06-18 18:35:23

ответ

1

Нет проблем с вашим элементом xsl:stylesheet.

Проблема здесь:

<xsl:value-of select="myObj:DateTimeToString(//t:TestRun/t:Times/@start)"/> 

От http://www.w3.org/TR/xslt#section-Extension-Functions

Если FunctionName в выражении FunctionCall не является NCName (т.е. если он содержит двоеточие), то обрабатывается как вызов расширения функция. Имя функции расширяется на имя с использованием пространства имен объявлений из оценки контекст.

Если процессор XSLT не имеет реализации функции расширения конкретного имя доступной, то функция доступного функция должна возвращать ложь для этого имени. Если такая функция расширения встречается в выражении и фактически вызывается функция расширения , то процессор XSLT должен сигнализировать об ошибке .

Ответ: Вам не хватает реализации функции расширения.

Итак, вы должны предоставить подробную информацию о своем процессоре и задать вопрос, каким образом ваш процессор связан с реализацией расширенных функций.

+0

+1 для подробного и правильного объяснения. –

0

Я вижу, ты схватил, что маленький вспомогательный объект от this поста. Кажется правильным, но убедитесь, что вы используете код C# для фактического преобразования.

+0

Ну, я на самом деле работаю над xsl, который уже существует. Этот файл не выдает ошибок при работе с ночными сборками на сервере сборки. Но когда я запускаю его локально в своей системе, он выдает ошибку. – Sidd

+0

@Sidd. Тогда вы не скомпилировали и не интегрировали в свою локальную систему файл, содержащий реализацию функции расширения. С другой стороны, этот файл * * включен * в сборку, выполненную на сервере сборки. –