【问题标题】:XSL Using Params in a contains functionXSL 在包含函数中使用参数
【发布时间】:2016-08-05 20:31:51
【问题描述】:

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

我有一个 C# 文件,它以参数的形式将信息传递给 XSL 工作表,以制作一个打印出数据的 html 页面。如果我对信息进行硬编码,它可以工作,但如果我使用 params 代替,如果我使用文本标签打印出信息,它就不会返回任何内容,所以我知道传入的值应该是正确的。

<xsl:param name="type"/>
<xsl:param name="filter"/>

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

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

谢谢,布兰登。

【问题讨论】:

  • 澄清类型是节点的名称(全名或类型),过滤器是他们正在寻找的词。
  • 您的问题没有得到解答吗?

标签: c# xml xslt


【解决方案1】:

也许你的意思是:

<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>

【讨论】:

  • type 是一个参数,所以 $ 是需要的。我从 $filter 中删除了“”,这对您很有帮助。现在它适用于 $filter 和硬编码类型,但不适用于 $type 作为参数。有可能吗?
  • 如果 type 是一个参数,那么你的谓词没有意义,因为它会为每所学校返回相同的值。我已经添加了一个关于你在这里真正想要做什么的猜测。如果这不能解决您的问题,请编辑您的问题并添加输入示例和预期输出。
猜你喜欢
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多