也许你的意思是:
<xsl:for-each select="london-schools/school [contains(type, $filter)]">
如果没有看到您的输入和预期的输出,很难确定 - 但可以肯定的是,如果 type 是节点的名称,那么它不应该以 $ 为前缀,如果 $filter 是参数,那么它不应该被引用。
还要注意 XML 是区分大小写的;你提到了type 和Type——它们不一样。
补充:
我真的在这里猜测,但请考虑以下几点:
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>