我有一个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>
请帮忙。
答案 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']);
<强>参考强>