2010-06-18 6 views
0

저는 xslt를 처음 사용합니다. 스타일 시트 태그에서 urn : helper를 사용하여 시도했다. 그러나 다음과 같은 오류가 발생합니다.
"접두사 'urn : Helper'"를 구현하는 스크립트 또는 외부 개체를 찾을 수 없습니다.xsl의 urn : helper 사용

다음은 내 코드에 사용 된 스 니펫입니다.


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

완전한시 트 시트를 제공하십시오. –

답변

1

xsl:stylesheet 요소에는 문제가 없습니다.

문제는 여기에 있습니다 :

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

FunctionCall 표현의 FUNCTIONNAME가의 NCName없는 경우

http://www.w3.org/TR/xslt#section-Extension-Functions에서 ( 는 콜론이 포함 된 경우 즉), 다음은 입니다 내선 기능 호출로 처리됩니다. FunctionName은 컨텍스트에서 선언의 네임 스페이스 선언을 사용하여 이름에 을 확장합니다. XSLT 프로세서가 사용할 수있는 특정 이름 의 확장 함수의 구현이없는 경우

는 다음 함수를 사용할 함수는 이름을 false를 반환해야합니다. 이러한 확장 함수 이 표현식에서 발생하고 확장 함수가 실제로 호출되면 XSLT 프로세서는 오류를 신호해야합니다.

대답 : 확장 기능 구현이 없습니다.

따라서 프로세서의 세부 정보를 제공하고 프로세서가 확장 된 기능 구현에 연결되는 구체적인 방법을 다시 물어보아야합니다.

+0

+1입니다. –

0

난 당신이 this 게시물에서 작은 도우미 개체 있음을 잡고 참조하십시오. 그것은 옳은 것처럼 보이지만 실제로 변환을 수행하기 위해 C# 코드를 사용하고 있는지 확인하십시오.

+0

글쎄, 실제로 존재하는 xsl에 대해 실제로 작업하고 있습니다. 이 파일은 야간 빌드 서버에서 실행될 때 오류를 발생시키지 않습니다. 그러나 시스템에서 로컬로 실행하면 오류가 발생합니다. – Sidd

+0

@Sidd 그런 다음 확장 기능 구현이 포함 된 파일을 로컬 시스템에 컴파일하고 통합하지 않았습니다. 다른면에서이 파일은 빌드 서버에서 수행 된 빌드에 포함됩니다. 자세한 설명과 정확한 설명은 –