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

注解

Note

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需要权限才能向Load该方法提供Evidence。 如果调用方没有必要的权限,则会引发 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 内容。

Note

建议在 CDATA 节中包装脚本块。

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

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

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

脚本函数定义的参数和返回值必须是下面列出的万维网联盟(W3C)类型之一。 下表详细介绍了 W3C 类型(XPath 或 XSLT)与相应.NET框架类之间的映射。

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 类型编号。

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

Note

msxsl:script也是msxsl: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, XmlResolver, Evidence)
已过时.

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

Load(IXPathNavigable, XmlResolver)
已过时.

加载包含在 中的 IXPathNavigableXSLT 样式表。

Load(IXPathNavigable)
已过时.

加载包含在 中的 IXPathNavigableXSLT 样式表。

Load(String, XmlResolver)
已过时.

加载 URL 指定的 XSLT 样式表。

Load(String)
已过时.

加载 URL 指定的 XSLT 样式表。

Load(XmlReader, XmlResolver, Evidence)
已过时.

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

Load(XmlReader, XmlResolver)
已过时.

加载包含在 中的 XmlReaderXSLT 样式表。

Load(XmlReader)
已过时.

加载包含在 中的 XmlReaderXSLT 样式表。

Load(XPathNavigator, XmlResolver, Evidence)
已过时.

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

Load(XPathNavigator, XmlResolver)
已过时.

加载包含在 中的 XPathNavigatorXSLT 样式表。

Load(XPathNavigator)
已过时.

加载包含在 中的 XPathNavigatorXSLT 样式表。

MemberwiseClone()
已过时.

创建当前 Object的浅表副本。

(继承自 Object)
ToString()
已过时.

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

(继承自 Object)
Transform(IXPathNavigable, XsltArgumentList, Stream, XmlResolver)
已过时.

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

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

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

Transform(IXPathNavigable, XsltArgumentList, TextWriter, XmlResolver)
已过时.

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

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

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

Transform(IXPathNavigable, XsltArgumentList, XmlResolver)
已过时.

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

Transform(IXPathNavigable, XsltArgumentList, XmlWriter, XmlResolver)
已过时.

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

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

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

Transform(IXPathNavigable, XsltArgumentList)
已过时.

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

Transform(String, String, XmlResolver)
已过时.

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

Transform(String, String)
已过时.

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

Transform(XPathNavigator, XsltArgumentList, Stream, XmlResolver)
已过时.

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

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

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

Transform(XPathNavigator, XsltArgumentList, TextWriter, XmlResolver)
已过时.

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

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

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

Transform(XPathNavigator, XsltArgumentList, XmlResolver)
已过时.

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

Transform(XPathNavigator, XsltArgumentList, XmlWriter, XmlResolver)
已过时.

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

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

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

Transform(XPathNavigator, XsltArgumentList)
已过时.

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

适用于

线程安全性

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