c# - XSL 在包含函数中使用参数

标签 c# xml xslt

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

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

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

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

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

谢谢,布兰登。

最佳答案

也许你的意思是:

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

关于c# - XSL 在包含函数中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38797380/

相关文章:

c# - 无法让 App.config 设置持续存在

android - 如何预览自定义 android 组件布局?

xml - XSLT:value-of 返回重复的元素值

通过 xslt 转换将 XML 文件转换为 output.xml

c# - 我如何在 C# 中获取调用方法

c# - 找不到 IAuthenticationManager 的对象引用

c# - 使用 C++-cli,如何实例化 C# 库中定义的 WinForms 表单?

C# XML 解析 - 查找元素的位置并读取下一个元素

android - 进度对话框 - AsyncTask

xslt - 重写而不使用 <xsl :for-each>; select all text separated by spaces; dropping text with attribute