信息: 指南在.net 应用程序中执行 XSLT 转换

文章翻译 文章翻译
文章编号: 313997 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文提供了一个路线图,介绍.net 框架命名空间和类的使用可以以编程方式执行在.net 应用程序中的可扩展样式表语言转换 (XSLT) 转换。路线图文章提供了指向包括联机文档、 Microsoft 知识库文章和 Microsoft 白皮书可帮助您了解有关 Microsoft 产品或技术的有用信息的链接。

本文不是一个 XSLT 教程。本文假定您熟悉 World Wide Web Consortium (W3C) XSLT standard,并已编写转换的 XML 数据的 XSLT 样式表的体验。

概述

XSLT 是在 www 联合会 (W3C) 标准,用于转换 XML 数据。XSLT 通常用于写入到 XML 数据转换为其他格式 (例如 HTML,固定长度的文本、 以逗号分隔的文本或另一种 XML 格式的样式表。

从开发人员的角度 XSLT 是一种编程语言实现与编程构造和解决常见的转换要求的元素相对应的元素的一个丰富的、 基于 XML 的语法。

XSLT 样式表经常使用 XML 路径语言 (XPath) 查询,以找到在源 XML 文档中的节点并应用 XSLT 模板来转换这些节点。XSLT 样式表中,XPath 查询的效率经常影响,并使用它的转换的性能影响。

从一个高级别的支架点的 XSLT 处理器是一个软件组件,它将指定的样式表应用于指定的源 XML 文档以执行 XSLT 转换,并生成所需的输出。

最终的 XSLT 转换生成的输出通常是指定的目标格式显示原始 XML 数据的结果文档。

在.net 应用程序执行 XSLT 转换中编写代码

下面的快速入门教程和 Microsoft 知识库文章说明如何在.net 应用程序将 XSLT 样式表应用于要执行基本转换 XML 文档中编写代码:
I.如何...将一个 XSL 转换应用于 XML 吗?
http://samples.gotdotnet.com/quickstart/howto/doc/Xml/TransformXml.aspx
307322如何: 在使用 Visual C#.net 将应用于 XML 文档的一个 XSL 转换
300929如何: 使用 Visual Basic.net 应用到 XML 文档的 XML 文档从一个 XSL 转换

System.Xml.Xsl 命名空间

System.Xml.Xsl 命名空间中的 XslTransform 类实现在.net Framework XSLT 处理器。创建和用于.net 应用程序中执行 XSLT 转换此类的对象实例。XSLT 处理器在.net 框架中的实现是符合 W3C XSLT Recommendation 的 1.0 版。

System.Xml.Xsl 命名空间还实现了以下类支持 XSLT 异常处理和 XSLT 转换和 XPath 查询的执行相关的高级的选项:
  • XsltArgumentList。您可以使用此类的对象实例提供扩展对象实例和 XSLT 样式表定义的 XSLT 参数和引用的值。
  • XsltCompileException。此类生成.net Framework 异常时正在编译的 XSLT 样式表时,就会出错。XSLT 样式表编译为执行 XslTransform 对象的 Load 方法时。
  • XsltException。此类生成.net Framework 异常时正在执行 XSLT 转换时发生运行时错误。
  • XsltContextIXsltContextFunctionIXsltContextVariable。这些高级组件用于实现和引用用户定义的函数和变量在使用 XPathNavigator 类和文档对象模型 (DOM) 的类来执行在.net 应用程序中的 XPath 查询中的要求时实现自定义的 XPath 查询执行上下文。

    若要更轻松地实现用户定义的函数和变量在 XSLT 样式表中包括的 XPath 查询表达式中,您可以使用嵌入式脚本块、 扩展对象和 XSLT 变量或参数。

高级的 XSLT 功能

本节描述几个高级的 XSLT 功能。

管道传送 XSLT 转换

管道是指通过增量应用两个或多个 XSLT 样式表转换将源 XML 文档的过程。每个中间阶段生成的输出作为输入下一阶段提供一直到要在最终阶段哪些然后生成相应的输出。

您必须持续到转换过程不直接相关的附加处理的生成中间阶段的输出时,此方法非常有用。 有关本主题的其他信息和一个代码示例,说明其用法,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
320847如何: 管线在.net 应用程序中的 XSLT 转换

参数化的 XSLT 转换

它是一种常见的 XSLT 做法来定义和使用样式表中的参数。参数化的 XSLT 样式表在有选择地定位和转换的 XML 数据源中的节点的 XPath 查询表达式中定义所引用的参数使用 <xsl:param> 元素。可以在样式表中的硬编码或在运行时提供的已定义的参数值。动态地提供来控制转换过程的输入的参数值的后一种惯例是此功能的最常见的用法。

在.net 的应用程序中 XsltArgumentList 对象用于提供在执行时的 XSLT 参数的值。AddParam 方法用于添加一个名称 / 值对类型的值,该值代表在样式表和它的值为 XsltArgumentList 对象中定义的参数。执行 转换XslTransform 对象用来执行转换的方法时,然后是作为参数提供 XsltArgumentList 对象。

GetParamRemoveParam 方法用于访问和删除添加到 XsltArgumentList 对象中的各个参数。 有关如何在.net 应用程序中执行参数化的 XSLT 转换的其他信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
321704如何: 在.net 应用程序中执行参数化的 XSL 转换

内联脚本块

内联脚本函数是一种可用于实现用户定义的函数和子在 XSLT 样式表中使用的 XPath 查询表达式中引用的过程的选项。能够在 XSLT 样式表中包括内联脚本块是 W3C 扩展。

在.net 框架中自定义的内联函数和子例程 <msxsl:script> XSLT 样式表中的块中编码。您可以使用一个 Microsoft Visual Studio.net 编程语言 (如 Microsoft Visual Basic.net 或 Microsoft Visual C#.net 实现这些例程。

与使用嵌入式脚本块相关联的缺点之一是它们使 XSLT 样式表不可移植。该技术、 所的标记和用来实现嵌入式脚本块的语义是 W3C XSLT 规范不执行标准化的特定于供应商的扩展。

您只能使用 XSLT 样式表的定义,并在转换由使用 XSLT 处理器执行,可以解释相关的语义和使用具有执行该代码的技术集成中成功使用嵌入式脚本块。

托管程序集是.net 框架中生成和隐式加载内联 <msxsl:script> 中执行包含的代码编写脚本块。阻止从转换过程完成后所正确卸载这些程序集的.net 框架中当前没有一个已知的问题。如果反复执行 XSLT 转换加载受影响的样式表,则内存使用量的增加可能导致此异常。仅当宿主进程被回收时,会释放未发布的内存。 有关在.net 框架中,此问题的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
316775PRB: 无法卸载程序集,您创建并加载在 XSLT 使用脚本
要变通解决此问题,Microsoft ASP.NET 应用程序中,可以加载一次在该应用程序的生命周期的过程中的受影响的样式表、 高速缓存在 ASP.NET 缓存) 中所受影响的样式表,然后重新缓存的版本进行转换使用后的。

在 Windows 窗体和控制台应用程序,您可以使用全局 XslTransform 对象实例在应用程序启动时加载受影响的样式表,并执行更高版本的转换。这些解决方法并不适用时必须执行无状态的环境 (例如对于中间层企业服务组件) 中的 XSLT 转换。

Microsoft 建议您使用 XSLT 扩展对象来实现自定义的 XPath 扩展函数,要变通解决此问题。

XSLT 扩展对象

Microsoft 建议您在实现自定义子例程和函数所引用的 XSLT 样式表中使用的 XPath 查询表达式中使用扩展对象。

您可以创建.net Framework dll 实现,以及在.net 应用程序中执行转换时使用扩展对象。自定义子例程和函数在一个 DLL 中实现并由执行的 XslTransform 对象的 转换 方法时使用 XsltArgumentList 对象 DLL 组件的对象实例提供作为运行时参数。

AddExtensionObjectXsltArgumentList 类的方法用于向 XsltArgumentList 对象添加扩展对象实例。若要访问和删除添加到 XsltArgumentList 对象的扩展对象实例,您可以使用的 获取 和扩展对象的 删除 方法。

W3C XSLT 规范地址概念以及使用扩展元素的和没有任何函数留意或引用到您必须使用来实现它们的基本技术。您必须定义和引用函数和子例程中扩展对象实现的样式表中使用基于标准的 XML 命名空间前缀。供应商可以选择一种最适合其平台来扩展对象的实现方面的技术。 有关概念以及使用 XSLT 扩展对象在.net 框架中的其他信息和步骤来创建一个端到端应用程序,该应用程序演示了如何在.net 应用程序中执行 XSLT 转换时使用扩展对象,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
321702如何: 使用扩展对象,当您在 Visual Basic.net 应用程序中执行 XSL 转换

要执行 XSLT 转换中使用.net 框架类的一般准则

  • XPathDocument 类高度优化为 XSLT 和 XPath 处理。为获得最佳的性能始终使用 XPathDocument 对象正在执行 XSLT 转换时提供源 XML。
  • 您可以缓存,并重复使用的用于加载 XSLT 样式表经常用于执行更高版本转换的 XslTransform 对象。
  • XSLT 处理器并不自动缓存的 XSLT 转换中使用的扩展对象实例。可以缓存和重用 XsltArgumentList 对象,用于执行更高版本转换时提供的常用的 XSLT 样式表的扩展对象实例。这是在.net 框架中的 XSLT 转换中使用的缓存扩展对象的方法。
  • 应仅加载一次并缓存实现嵌入式脚本块的 XSLT 样式表。您应该重新使用缓存的 XslTransform 对象,用于以后的转换。使用这种做法可以解决该内存管理问题,必须在样式表中使用内联脚本函数时,Microsoft 知识库文章 Q316775 中描述的。
  • Microsoft 建议您在实现自定义函数所引用的 XSLT 样式表中使用的 XPath 查询表达式中使用扩展对象。仅当您具有实现和引用自定义的扩展函数在使用 XPathNavigator 和 DOM 类来执行在.net 应用程序中的 XPath 查询表达式中时,请实现 XsltContextIXsltContextFunctionIXsltContextVariable 的自定义类。
  • 实现的异常处理代码来处理 XsltCompileExceptionXsltException 中和 XmlException.net Framework 异常类,当您编写代码以执行 XSLT 转换。这些异常类提供有关当您执行 XSLT 转换时,就会出现任何 XSLT 特定于 XML 的问题的信息。此外,Microsoft 建议您实现处理其他特定的.net 异常的代码并实现泛型 System.Exception 类基于其他、 非 XSLT 有关执行 XSLT 转换的代码块中实现的功能。

性能的.net 框架中的 XSLT 转换

原因和解决方案的已知的性能问题时在.net 的应用程序中执行 XSLT 转换有关的其他信息单击以下文章编号,以查看 Microsoft 知识库中相应的文章:
325689XSLT 转换,.net 框架中的信息: 性能

故障排除

如果您遇到问题,或者您有疑问,可以引用 MSDN 新闻组,您可以在与同事共享您的经验。您还可以使用 Microsoft 知识库,您可以在其中搜索有关特定问题的文章或与 Microsoft 产品支持服务联系。
MSDN 新闻组
http://msdn.microsoft.com/newsgroups/

搜索知识库
http://support.microsoft.com/search

Microsoft 产品支持服务
http://support.microsoft.com

参考

%1 的其他信息,请单击以查看 Microsoft 知识库中相应的文章 %2 的文章编号 %2 下面:
313651指南信息:.net 框架中的 XML

属性

文章编号: 313997 - 最后修改: 2005年8月12日 - 修订: 4.4
这篇文章中的信息适用于:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
关键字:?
kbmt kbarttyperoadmap kbinfo KB313997 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 313997
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com