在.NET的XML处理体系中,XsltArgumentList是实现XSL转换时传递参数的核心类,通过它可以将自定义的参数值传入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