XslTransform 类

定义

注意

This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202

使用可扩展样式表转换语言 (XSLT) 转换 XML 数据。

public ref class XslTransform sealed
public sealed class XslTransform
[System.Obsolete("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public sealed class XslTransform
type XslTransform = class
[<System.Obsolete("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
type XslTransform = class
Public NotInheritable Class XslTransform
继承
XslTransform
属性

示例

以下示例转换指定的 XML 文档,并将结果输出到控制台。

//Create a new XslTransform object.
XslTransform xslt = new XslTransform();

//Load the stylesheet.
xslt.Load("http://server/favorite.xsl");

//Create a new XPathDocument and load the XML data to be transformed.
XPathDocument mydata = new XPathDocument("inputdata.xml");

//Create an XmlTextWriter which outputs to the console.
XmlWriter writer = new XmlTextWriter(Console.Out);

//Transform the data and send the output to the console.
xslt.Transform(mydata,null,writer, null);
'Create a new XslTransform object.
Dim xslt As New XslTransform()

'Load the stylesheet.
xslt.Load(CType("http://server/favorite.xsl", String))

'Create a new XPathDocument and load the XML data to be transformed.
Dim mydata As New XPathDocument("inputdata.xml")

'Create an XmlTextWriter which outputs to the console.
Dim writer As New XmlTextWriter(Console.Out)

'Transform the data and send the output to the console.
xslt.Transform(mydata, Nothing, writer, Nothing)

注解

备注

XslTransform类在 Microsoft .NET Framework 版本 2.0 中已过时。 该 XslCompiledTransform 类是新的 XSLT 处理器。 有关详细信息,请参阅 使用 XslCompiledTransform 类 并从 XslTransform 类迁移

XslTransform 支持 XSLT 1.0 语法。 XSLT 样式表必须使用命名空间 http://www.w3.org/1999/XSL/Transform

还可以使用 XsltArgumentList 类将其他参数添加到样式表中。 此类包含样式表和可从样式表调用的扩展对象的输入参数。

转换 XML 数据:

  1. 创建一个 XslTransform 对象。

  2. 使用该方法 Load 加载转换的样式表。 此方法有多个重载,可以使用文件位置的 XmlReaderURL XPathNavigatorIXPathNavigable或 URL 加载样式表。

  3. 使用该方法 Transform 转换 XML 数据。 此方法有多个重载,可以处理不同类型的输入和输出。 还可以指定要 XsltArgumentList 在转换期间用作输入的其他参数。

安全注意事项

在创建使用 XslTransform 类的应用程序时,应了解下列项及其含义:

  • 默认情况下启用扩展对象。 如果包含扩展对象的 XsltArgumentList 对象传递给 Transform 方法,将利用这些扩展对象。

  • XSLT 样式表可以包括对其他文件的引用以及嵌入式脚本块。 恶意用户可以通过提供数据或样式表来利用此漏洞,执行时会导致系统处理,直到计算机在资源上运行不足为止。

  • 在混合信任环境下运行的 XSLT 应用程序可能会引发样式表欺骗。 例如,恶意用户可能会为对象加载有害的样式表,并将其交给另一个用户,而后者会继续调用 Transform 方法并执行转换。

通过不接受 XslTransform 来自不受信任的源的对象、XSLT 样式表或 XML 源数据,可以缓解这些安全问题。

脚本支持

此类支持使用 msxsl:script 元素的嵌入脚本。

在.NET Framework版本 1.1 中,样式表的证据决定了向嵌入脚本授予哪些权限。

  • 如果样式表已从统一资源标识符 (URI) 加载,则 URI 用于创建证据。 此证据包括 URI 及其站点和区域。

  • 如果使用另一个源加载样式表,可以通过将对象传递给System.Security.Policy.EvidenceLoad方法来提供证据。 否则,脚本程序集具有完全信任。

半受信任的调用方: UnmanagedCode 编译嵌入脚本需要权限。 ControlEvidence需要权限才能提供给EvidenceLoad该方法。 如果调用方没有必要的权限,则会引发 A SecurityException 。 有关更多信息,请参见System.Security.Permissions.SecurityPermissionSystem.Security.Permissions.SecurityPermissionFlag

msxsl:script 元素具有以下要求:

  • msxsl:script 元素属于 urn:schemas-microsoft-com:xslt 命名空间。 样式表必须包含命名空间声明 xmlns:msxsl=urn:schemas-microsoft-com:xslt

  • msxsl:script 元素可以包含一个 language 属性,该属性指定要使用的脚本语言。 特性的值language必须是下列属性之一:C#、CSharp、VB、VisualBasic、JScript 或 JavaScript。 由于语言名称不区分大小写,因此 JavaScript 和 javascript 都是有效的。 language如果未指定属性,则默认为JScript。

  • msxsl:script 元素必须包含一个 implements-prefix 属性,该属性包含表示与脚本块关联的命名空间的前缀。 必须在样式表中定义此命名空间。 样式表可以包含多个按命名空间分组的脚本块。 不能在同一命名空间中具有多种语言的脚本块。 脚本块可以调用在另一个脚本块中定义的函数,前提是脚本块驻留在同一命名空间中。 脚本块的内容根据属性) 提供的 language 脚本语言 (的规则和语法进行分析。 例如,如果你有 C# 脚本块,注释将以 // 字符为前缀。 注释必须是有效的 XML 内容。

备注

建议在 CDATA 部分中包装脚本块。

<msxsl:script implements-prefix='xy' language='C#'>  
 <![CDATA[  
 // Add code here.  
 ]]>
</msxsl:script>  

函数可以在 msxsl:script 元素内声明。 下表显示了默认情况下支持的命名空间。

支持的命名空间 说明
System 系统类。
System.Collection 集合类。
System.Text 文本处理类。
System.Xml 核心 XML 类。
System.Xml.Xsl XSLT 类。
System.Xml.XPath XML 路径语言 (XPath) 类。

脚本函数定义的提供参数和返回值必须是以下列出的 W3C (W3C) 类型之一。 下表详细介绍了 W3C 类型(XPath 或 XSLT)与相应.NET Framework类之间的映射。

W3C 类型 等效的 .NET 类
字符串 (XPath) System.String
布尔 (XPath) System.Boolean
数字 (XPath) System.Double
结果树片段 (XSLT) System.Xml.XPath.XPathNavigator
节点集 (XPath) System.Xml.XPath.XPathNodeIterator

如果脚本函数利用以下数值类型之一:Int16、UInt16、Int32、UInt32、Int64、UInt64、Single 或 Decimal,则这些类型将强制转换为 Double,该类型映射到 W3C XPath 类型编号。

调用无法将参数结果转换为所需类型的函数时,将引发异常。

备注

msxsl:scriptmsxsl:node-list类支持的命名空间中唯一的XslTransform函数urn:schemas-microsoft-com:xslt

XslTransform 能够将公共语言运行时 (CLR) 代码用作扩展机制。 这可以通过将类的实例传递给类 XslTransform 并在 XSLT 样式表中调用其公共方法来实现。 使用 params 关键字定义的方法(允许传递未指定数量的参数)在此方案中无法正常工作。 有关更多详细信息,请参阅 参数

有关详细信息,请参阅 XslTransform 类的 XSLT 转换

构造函数

XslTransform()

初始化 XslTransform 类的新实例。

属性

XmlResolver
已过时。

设置调用 XmlResolver 方法时用于解析外部资源的 Transform

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
Load(IXPathNavigable)
已过时。

加载 IXPathNavigable 中包含的 XSLT 样式表。

Load(IXPathNavigable, XmlResolver)
已过时。

加载 IXPathNavigable 中包含的 XSLT 样式表。

Load(IXPathNavigable, XmlResolver, Evidence)

加载 IXPathNavigable 中包含的 XSLT 样式表。 此方法允许您通过指定证据来限制样式表的权限。

Load(String)

加载由一个 URL 指定的 XSLT 样式表。

Load(String, XmlResolver)

加载由一个 URL 指定的 XSLT 样式表。

Load(XmlReader)
已过时。

加载 XmlReader 中包含的 XSLT 样式表。

Load(XmlReader, XmlResolver)
已过时。

加载 XmlReader 中包含的 XSLT 样式表。

Load(XmlReader, XmlResolver, Evidence)

加载 XmlReader 中包含的 XSLT 样式表。 此方法允许您通过指定证据来限制样式表的权限。

Load(XPathNavigator)
已过时。

加载 XPathNavigator 中包含的 XSLT 样式表。

Load(XPathNavigator, XmlResolver)
已过时。

加载 XPathNavigator 中包含的 XSLT 样式表。

Load(XPathNavigator, XmlResolver, Evidence)

加载 XPathNavigator 中包含的 XSLT 样式表。 此方法允许您通过指定证据来限制样式表的权限。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)
Transform(IXPathNavigable, XsltArgumentList)
已过时。

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 XmlReader

Transform(IXPathNavigable, XsltArgumentList, Stream)
已过时。

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 Stream

Transform(IXPathNavigable, XsltArgumentList, Stream, XmlResolver)

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 Stream

Transform(IXPathNavigable, XsltArgumentList, TextWriter)
已过时。

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 TextWriter

Transform(IXPathNavigable, XsltArgumentList, TextWriter, XmlResolver)

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 TextWriter

Transform(IXPathNavigable, XsltArgumentList, XmlResolver)

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 XmlReader

Transform(IXPathNavigable, XsltArgumentList, XmlWriter)
已过时。

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 XmlWriter

Transform(IXPathNavigable, XsltArgumentList, XmlWriter, XmlResolver)

使用指定的 args 转换 IXPathNavigable 中的 XML 数据,并将结果输出到 XmlWriter

Transform(String, String)
已过时。

转换输入文件中的 XML 数据并将结果输出到输出文件。

Transform(String, String, XmlResolver)

转换输入文件中的 XML 数据并将结果输出到输出文件。

Transform(XPathNavigator, XsltArgumentList)
已过时。

使用指定的 args 转换 XPathNavigator 中的 XML 数据,并将结果输出到 XmlReader

Transform(XPathNavigator, XsltArgumentList, Stream)
已过时。

使用指定的 args 转换 XPathNavigator 中的 XML 数据,并将结果输出到 Stream

Transform(XPathNavigator, XsltArgumentList, Stream, XmlResolver)

使用指定的 args 转换 XPathNavigator 中的 XML 数据,并将结果输出到 Stream

Transform(XPathNavigator, XsltArgumentList, TextWriter)
已过时。

使用指定的 args 转换 XPathNavigator 中的 XML 数据,并将结果输出到 TextWriter

Transform(XPathNavigator, XsltArgumentList, TextWriter, XmlResolver)

使用指定的 args 转换 XPathNavigator 中的 XML 数据,并将结果输出到 TextWriter

Transform(XPathNavigator, XsltArgumentList, XmlResolver)

使用指定的 args 转换 XPathNavigator 中的 XML 数据,并将结果输出到 XmlReader

Transform(XPathNavigator, XsltArgumentList, XmlWriter)
已过时。

使用指定的参数转换 XPathNavigator 中的 XML 数据,并将结果输出到 XmlWriter

Transform(XPathNavigator, XsltArgumentList, XmlWriter, XmlResolver)

使用指定的参数转换 XPathNavigator 中的 XML 数据,并将结果输出到 XmlWriter

适用于

线程安全性

XslTransform 对象仅适用于转换操作的线程安全。 其他操作不能保证线程安全。 必须确保在加载操作期间不会对对象调用任何其他方法。