XslTransform 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
注意
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 数据:
创建一个 XslTransform 对象。
使用该方法 Load 加载转换的样式表。 此方法有多个重载,可以使用文件位置的 XmlReaderURL XPathNavigatorIXPathNavigable或 URL 加载样式表。
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.SecurityPermission 和 System.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解析外部资源。 |
方法
适用于
线程安全性
XslTransform 对象仅适用于转换操作的线程安全。 不保证其他操作是线程安全的。 必须确保在加载操作期间不会对对象调用其他方法。