可扩展样式表语言转换 (XSLT) 可以将源 XML 文档的内容转换为另一个格式或结构不同的文档。 例如,可以使用 XSLT 将 XML 转换为在网站上使用的 HTML 或转换为只包含应用程序所需字段的文档。XslCompiledTransform 类是 .NET Framework 中的 XSLT 处理器。 XslCompiledTransform 类支持 W3C XSLT 1.0 建议。与过时的XslTransform类相比,该类是一个新的实现并且包括了性能的提升。XslCompiledTransform 类的结构与XslTransform类非常相似。Load方法加载并编译样式表,而Transform方法则执行 XSLT 转换。例如:
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl");
// Execute the transform and output the results to a file.
xslt.Transform("books.xml", "books.html");

安全注意事项

    创建使用 XslCompiledTransform 类的应用程序时,应注意下面的项及其含义:

  • 在默认情况下,XSLT脚本是禁用的。只有当需要脚本支持并且在完全信任的环境中工作时,才应该启用XSLT脚本。

  • 在默认情况下,XSLTdocument()函数是禁用的。如果启用document()函数,则可通过将XmlSecureResolver对象传递至 Transform 方法限制可访问的资源。

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

  • XSLT 样式表可以包含对其他文件的引用和嵌入的脚本块。某个恶意用户可能会利用这一点,如果执行该用户提供的数据或样式表,就会导致系统不停地进行处理直至计算机资源消耗殆尽。

  • 运行在混合信任环境中的 XSLT 应用程序能够导致样式表欺骗。例如,某个恶意用户可以加载一个带有有害样式表的对象,然后将其传给下一个调用Transform方法并执行转换的用户。

这些安全问题可以通过以下方式得到缓解:第一,只有在样式表来自受信任来源时才启用脚本或 document() 函数;第二,不接受来自不受信任来源的 XslCompiledTransform 对象、XSLT 样式表或 XML 源数据。

在Visual Studio 2005 或者Visual Studio 2008 中调试:

  1. 在实例化XslCompiledTransform对象时,在代码中将 enableDebug 参数设置为 true

    此设置通知 XSLT 处理器在编译代码时创建调试信息。

  2. 右击Transform调用,指向“断点”,再选择“插入断点”。

  3. 按 F5 键启动 Visual Studio 调试程序。

  4. 按 F11 键进入并逐行执行 XSLT 代码。

    XSLT 样式表加载到新的文档窗口中,XSLT 调试程序也将启动。

示例

下面是一个 C# XSLT 程序的示例。 该示例显示如何启用 XSLT 调试。
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
namespace ConsoleApplication {
class Program {
{
private const string sourceFile = @"c:\data\xsl_files\books.xml";
private const string stylesheet = @"c:\data\xsl_files\belowAvg.xsl";
private const string outputFile = @"c:\data\xsl_files\output.xml";
static void Main(string[] args)
{
// Enable XSLT debugging.
XslCompiledTransform xslt = new XslCompiledTransform(true);
// Compile the style sheet.
xslt.Load(stylesheet)
// Execute the XSLT transform.
FileStream outputStream = new FileStream(outputFile, FileMode.Append);
xslt.Transform(sourceFile, null, outputStream);
}
}
}

 

转载自:http://blog.sina.com.cn/s/blog_3ef2a82a0100dd9h.html

posted on 2015-08-13 14:00  踏歌&而行  阅读(441)  评论(0)    收藏  举报