如果没有给出参数,如何忽略添加到 XSLT 文件中的参数?

Posted

技术标签:

【中文标题】如果没有给出参数,如何忽略添加到 XSLT 文件中的参数?【英文标题】:How to ignore param added to XSLT file if no param given? 【发布时间】:2020-02-09 13:58:16 【问题描述】:

在我的 XSLT 文件中,我必须添加一个参数,让用户选择书籍的“流派”,这是从下拉列表中选择的,然后单击一个按钮以将 XSLT 参数更新为所选流派

<xsl:apply-templates select="ListOfItems/*[Genre = $Genre]"/>

我的 XML 文件如下所示:

<ListOfItems>
 <Product>
    <Title>Book A</Title>
    <Price>15</Price>
    <Author>J Smith</Author>
    <Genre>Medical</Genre>
  </Product>
  ... etc
</ListOfItems>

用户从下拉列表中选择流派并按下按钮

Protected Sub loadGenre_Click(sender As Object, e As EventArgs) Handles loadGenre.Click
    Dim xslArg As XsltArgumentList = New XsltArgumentList()
    xslArg.AddParam("Genre", "", "" + genreSelect.Text)
    Me.xmlProducts.TransformArgumentList = xslArg
End Sub

我的问题是我希望最初显示所有产品,有没有办法根据用户是否选择了一种类型来打开和关闭 XSLT 参数?

【问题讨论】:

【参考方案1】:
You should be able to use an xsl:if statement like:
```
<xsl:if test="$Genre = ''">
    <xsl:apply-templates select="ListOfItems/*"/>
</xsl:if>

<xsl:if test="$Genre != ''">
    <xsl:apply-templates select="ListOfItems/*[Genre = $Genre]"/>
</xsl:if>
```
you could also use `<xsl:choose>`

【讨论】:

太棒了!这种工作,我用有效的代码提出了一个编辑请求。我找不到 ELSE 标签,所以我使用了两个 if 并再次检查了条件。 @Ari 如果您需要 ELSE,请使用 xsl:choose 还请注意,您可以将其简化为单行:&lt;xsl:apply-templates select="ListOfItems/*[Genre = $Genre or $Genre='']"/&gt; - 如果您喜欢那种东西。

以上是关于如果没有给出参数,如何忽略添加到 XSLT 文件中的参数?的主要内容,如果未能解决你的问题,请参考以下文章

XSLT 将命名空间前缀添加到元素最佳实践

如何将文件添加到忽略列表中

如何在 xslt 中添加空格并将记录限制为 300 个字符

如何在 Azure DevOps 的 OWASP ZAP 扫描中使用 XSLT 文件添加误报?

使用 xslt 模板将多个图像添加到 docx 文件

如何将 xslt 中的参数用作 XPath?