访问 XSL 中的 URL 个参数

Acessing URL parameters in XSL

我想从我的 XSL 中的当前页面 URL 获取 URL 参数,并用它来测试模板 xpath 中的条件。 例如:

<xsl:apply-templates select="//search-results/orders/order[@id = URL Parameter]"  mode="tableContent"/>

我无法控制 XML,因为它是由正在使用的工具生成的。

我尝试使用 JavaScript 从 URL 获取参数并将其保存在 XSL 中的 js 变量中,但我无法继续在上述 xpath 条件下获取此变量值。 不确定我是否采用了正确的方法。

@dariom : 我将 URL 参数存储在同一页面的输入字段中,然后在下面的 js 代码中获取该值

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="UTF-8"/>

    <xsl:template match="/">

        <script language = "javascript">
            $( document ).ready(function() {
            var trxid = document.getElementById("tempField").value;
            console.log("trxid");
            console.log(trxid);
            });
        </script>


        <textarea><xsl:copy-of select="*"/></textarea>  
        <input type="hidden" id="countValue" class="countValue" value="{search-results/size}"/> 

        <xsl:apply-templates select="//search-results/orders/order[@id = trxid ]"/>
    </xsl:template>
</xsl:stylesheet>

更新

我正在使用基于 CMS 工具的闭源 portlet。此 portlet 根据其 GUI 配置生成 XML 作为输出。 并且我正在使用 XSL 来显示 output.I 对 portlet 没有任何进一步的控制。

XSLT 本身并不知道它是在网页上下文中执行的,因此您无法直接访问 URL.

但是,您可以将参数传递给 XSLT,这听起来就像您正在做的那样。您可以添加 JavaScript 代码和 XSLT 的示例吗?根据您的描述,听起来您需要使用 <xsl:param /> 元素而不是 <xsl:variable /> 元素。

更新

根据您添加的代码,XSLT 似乎正在生成一个内置了 JavaScript 的 HTML 页面。问题是您的 JavaScript 在 XSLT 创建它的输出后 运行 。您不能在 XSLT 中使用 trxid JavaScript 变量的值,因为它尚未定义(并且您不能像那样混合使用 XSLT 和 JavaScript)。

要实现您需要执行的操作,您需要将 URL 参数值传递到您的 XSLT 处理器(假设它支持此功能),创建一个 <xsl:param> 元素以包含该值您的参数,然后您可以在 XPath 表达式中使用该参数。

类似于:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    ...
    <!-- defintion of your XSLT parameter. Note this has a global scope -->
    <xsl:param name="trxid" />
    ...
    <!-- usage of your XSLT parameter. Note the '$' prefix -->
    <xsl:apply-templates select="//search-results/orders/order[@id = $trxid ]"/>
    </xsl:template>
</xsl:stylesheet>

关键是弄清楚如何调用 XSLT 处理器并为其提供参数值。我建议使用您编写代码的语言和您使用的 XSLT 处理器的详细信息更新您的答案。

更新

我搜索了更多关于 Unify 的信息。我不知道我找到的信息是否适合您的上下文(似乎 Unify 中有很多模块)但这似乎是您所追求的:request parameters in XSL.

因此,我更新后的示例将变为(假设您的查询字符串参数名为 'trxid'):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    ...
    <xsl:param name="request_trxid" />
    ...
    <!-- usage of your XSLT parameter. Note the '$' prefix -->
    <xsl:apply-templates select="//search-results/orders/order[@id = $request_trxid]"/>
    </xsl:template>
</xsl:stylesheet>

如果可行,您不必添加 JavaScript 代码和隐藏字段。