XSL在包含函数中使用参数

本文关键字:参数 函数 包含 XSL | 更新日期: 2023-09-27 18:01:08

是否可以使用params作为包含函数的数据?

我有一个C#文件,它以param的形式将信息传递给XSL表,以生成打印数据的html页面。如果我对信息进行硬编码,它是有效的,但如果我使用params,它什么也不返回。如果我使用文本标记打印出信息,它有效,所以我知道传递的值应该是正确的。

<xsl:param name="type"/>
<xsl:param name="filter"/>
<xsl:for-each select="london-schools/school [contains($type, '$filter')]">

这就是我想要做的,它只是返回表格标题而不是信息。

谢谢,布兰登。

XSL在包含函数中使用参数

也许你的意思是:

<xsl:for-each select="london-schools/school [contains(type, $filter)]">

如果看不到您的输入和预期输出,很难确定——但可以肯定的是,如果type是节点的名称,那么它不应该以$为前缀,而如果$filter是参数,那么它就不应该被引用。

还要注意,XML区分大小写;你提到了typeType——它们不一样。


已添加:

我真的在猜测,但考虑以下内容:

XML

<records>
    <record>
        <name>Alpha</name>
        <type>Bravo</type>
    </record>
    <record>
        <name>Bravo</name>
        <type>Bravo</type>
    </record>
    <record>
        <name>Charlie</name>
        <type>Alpha</type>
    </record>
    <record>
        <name>Delta</name>
        <type>Alpha</type>
    </record>
</records>

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="property"/>
<xsl:param name="value"/>
<xsl:template match="/records">
    <xsl:copy>
        <xsl:for-each select="record[contains(*[name()=$property], $value)]">
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

当上面的样式表应用于带有参数的输入时:

$property = "name"
$value = "Bravo"

结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<records>
  <record>
    <name>Bravo</name>
    <type>Bravo</type>
  </record>
</records>

当参数为:

$property = "type"
$value = "Bravo"

结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<records>
  <record>
        <name>Alpha</name>
        <type>Bravo</type>
    </record>
  <record>
        <name>Bravo</name>
        <type>Bravo</type>
    </record>
</records>