首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在xsl中使用urn:helper

在xsl中使用urn:helper
EN

Stack Overflow用户
提问于 2010-06-19 00:36:25
回答 2查看 1.8K关注 0票数 0

我是第一次接触xslt。我尝试在stylesheet标记中使用urn:helper。但它会抛出以下错误。

“找不到实现前缀‘urn:Helper’的脚本或外部对象”。

下面是我的代码中使用的代码片段。

代码语言:javascript
复制
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"

我是不是遗漏了什么?

谢谢..

编辑:完整的样式表

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-19 05:02:05

您的xsl:stylesheet元素没有问题。

问题出在这里:

代码语言:javascript
复制
<xsl:value-of select="myObj:DateTimeToString(//t:TestRun/t:Times/@start)"/> 

来自http://www.w3.org/TR/xslt#section-Extension-Functions

如果FunctionCall表达式中的FunctionName不是NCName (即,如果它包含冒号),则将其视为对扩展函数的调用。使用计算上下文中的名称空间声明将FunctionName扩展为一个名称。

如果XSLT处理程序没有可用的特定名称的扩展函数的实现,则function-available函数必须为该名称返回false。如果这样的扩展函数出现在表达式中,并且扩展函数被实际调用,则XSLT处理器必须发出错误信号。

答案是:你缺少扩展函数实现的。

因此,您必须提供您的处理器的详细信息,并重新询问您的处理器与扩展功能的实现相链接的具体方式。

票数 1
EN

Stack Overflow用户

发布于 2010-06-19 00:42:31

我看到你从this帖子上抓取了那个小辅助对象。这似乎是正确的,但请确保您使用的是C#代码来实际执行转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3071478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档