如何用XsltArgumentList实现xsl的参数调用

来源:Nodejs社区作者:本地能跑头衔:程序员
导读:本期聚焦于小伙伴创作的《如何用XsltArgumentList实现xsl的参数调用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用XsltArgumentList实现xsl的参数调用》有用,将其分享出去将是对创作者最好的鼓励。

在.NET的XML处理体系中,XsltArgumentList是实现XSL转换时传递参数的核心类,通过它可以将自定义的参数值传入XSL样式表,让样式表根据参数动态调整转换逻辑,避免每次转换都需要修改样式表本身的内容。

如何用XsltArgumentList实现xsl的参数调用

XsltArgumentList的基本使用流程

使用XsltArgumentList传递参数主要分为三个步骤:创建XsltArgumentList实例、添加参数到实例中、在XSL转换时传入该实例。下面是完整的C#代码示例,演示从参数定义到转换执行的全流程。

using System;
using System.Xml;
using System.Xml.Xsl;

namespace XsltArgumentDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建XSL转换对象
            XslCompiledTransform xslt = new XslCompiledTransform();
            // 加载XSL样式表,这里假设样式表文件为test.xsl
            xslt.Load("test.xsl");

            // 创建XsltArgumentList实例
            XsltArgumentList argsList = new XsltArgumentList();
            // 添加参数,参数名为showTitle,值为true,无命名空间
            argsList.AddParam("showTitle", "", true);
            // 添加带命名空间的参数,参数名为maxCount,命名空间为http://demo.com/ns,值为10
            argsList.AddParam("maxCount", "http://demo.com/ns", 10);

            // 创建XML输出写入器,输出到控制台
            XmlWriter writer = XmlWriter.Create(Console.Out);
            // 加载待转换的XML文档,这里使用内存中的XML示例
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml("<root><item>内容1</item><item>内容2</item></root>");
            // 执行转换,传入参数列表
            xslt.Transform(xmlDoc, argsList, writer);
            writer.Close();
        }
    }
}

XSL样式表中参数的接收与使用

在XSL样式表中,需要声明对应的参数才能接收XsltArgumentList传递过来的值,无命名空间的参数直接使用<xsl:param>声明,带命名空间的参数需要先定义命名空间前缀再声明。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:demo="http://demo.com/ns">
    <!-- 声明无命名空间的参数showTitle -->
    <xsl:param name="showTitle" />
    <!-- 声明带命名空间的参数maxCount,使用demo前缀对应命名空间 -->
    <xsl:param name="demo:maxCount" />

    <xsl:template match="/">
        <html>
            <body>
                <!-- 根据showTitle参数决定是否显示标题 -->
                <xsl:if test="$showTitle = 'true'">
                    <h1>转换结果</h1>
                </xsl:if>
                <ul>
                    <!-- 遍历item节点,最多显示maxCount个 -->
                    <xsl:for-each select="root/item">
                        <xsl:if test="position() <= $demo:maxCount">
                            <li>
                                <xsl:value-of select="." />
                            </li>
                        </xsl:if>
                    </xsl:for-each>
                </ul>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

参数使用的注意事项

  • 参数名称需要和XsltArgumentList中添加的参数名称完全一致,包括大小写,否则样式表无法接收到参数值。
  • 带命名空间的参数,XsltArgumentList添加时的命名空间字符串要和XSL样式表中定义的命名空间完全一致,前缀可以不同但命名空间URI必须匹配。
  • 传递的参数值类型会被自动转换为XSL支持的类型,比如C#的bool类型会转为XSL的布尔值,数值类型会转为XSL的数值,字符串会转为XSL的字符串。
  • 如果XSL样式表中声明的参数在XsltArgumentList中没有传递对应值,参数会使用样式表中定义的默认值,没有默认值则为空。

常见使用场景

XsltArgumentList的参数传递能力在很多场景中都很有用,比如根据用户选择的语言参数生成不同语言的页面,根据分页参数控制XML转换后的内容数量,根据环境参数切换不同的转换规则等。相比修改XSL样式表,通过参数传递动态值的方式更加灵活,也便于维护。

XsltArgumentListxsl参数调用XSLTC#XML修改时间:2026-06-20 04:30:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。