在XSLT中传递和访问参数

时间:2014-04-29 05:23:13

标签: xml xslt parameters

我有一个XML,我使用XSLT将测试用例显示为HTML。

我有一个查询。

如何将变量作为参数传递并在另一页上访问它。

到目前为止,我实现了这个目标:

               <xsl:for-each select="//test-suite[@type='TestFixture']">
                <tr>      
                    <xsl:choose>
                    <xsl:when test="contains(@result, 'Success')">
                    <xsl:variable name="nameOfPage" select="@name" />
                <td><a href="DownloadManagerFeature.xml?nameOfPage={$nameOfPage}" style="text-decoration: none" ><font color="239625"><xsl:value-of select="@name"/></font></a></td>
                <td><xsl:value-of select="@result"/></td>
                <td><xsl:value-of select="@time"/></td>
                    </xsl:when>

如您所见,我将name参数的值设置为nameOfPage和 我将它作为URL参数传递。

但是我正面临在其他页面上检索它的一些问题。

 <td>test page</td>
 <td><xsl:value-of select="@nameOfPage"/></td>

该值为null。 我甚至在顶部添加了这个:

<xsl:variable name="nameOfPage" select="document('Mimedrive.Tests.xml')"/>

我正在尝试将nameOfPage与案例中的@name匹配。 当我使用硬编码值进行操作时,如:

                </tr>
                <xsl:for-each select="//test-case">
                    <xsl:if test="contains(@name, 'XXX.DownloadManagerFeature')">
                <tr>
                <td><xsl:value-of select="@description"/></td>
                <td><xsl:value-of select="@result"/></td>
                </tr>

请帮忙。

1 个答案:

答案 0 :(得分:0)

使用XSLT的JavaScript绑定在处理之前设置nameOfPage参数。

假设XML文档的XHTML名称空间是默认名称,那么:

function transform()
  {
  var nameOfPage = var value=RegExp("nameOfPage[^&]+").exec(window.location.search)[0].replace(/[^=]+./,"");

  with (new XSLTProcessor)
     {
     setParameter(null, "nameOfPage", nameOfPage);
     importStylesheet("foo.xsl");
     transform.result = transformToFragment(this, document);
     transform.root = transform.result.xml;
     document.getElementById(appendTo).appendChild(transform.root);
     }
  }

或者使用处理器特定的处理指令,如在Firefox中:

<?xslt-param name="nameOfPage" value="foo"?>
<?xml-stylesheet type="text/xsl" href="foo.xsl"?>

或者使用特定于处理器的setParameter方法,例如PHP:

$transformer  = new XSLTProcessor();
$transformer->importStylesheet("foo.xsl");
$transformer->setParameter('', 'nameOfPage', $_POST['nameOfPage']);

<强>参考