gpt4 book ai didi

c# - 在 .NET 中使用 asp 对象 - 最大兼容性

转载 作者:行者123 更新时间:2023-11-30 17:13:01 25 4
gpt4 key购买 nike

我有一些在其中合并了 VBScript 的遗留 XSLT 脚本。它们在旧系统上运行,我无法更改该系统。

我现在需要更改 XSLT 以不同方式转换文件。

我构建了一个简单的 .NET 项目来测试我的 XSLT 转换:

    [STAThread]
public static void Main(string[] args)
{
var transform = new XslCompiledTransform(true);
//foreach (var file in System.Reflection.Assembly
// .GetExecutingAssembly().GetManifestResourceNames()
// )
//{
// Console.WriteLine(file);
//}
//Console.ReadKey();


transform.Load(XmlTextReaderFromEmbeddedResource("MyXSLTFile"),
new XsltSettings() { EnableDocumentFunction = true, EnableScript = true }, new XmlUrlResolver());
transform.Transform(
XmlTextReaderFromEmbeddedResource("MySourceXML"),
ToXmlTextWriter("MyOutput.xml"));

}

private static XmlTextReader XmlTextReaderFromEmbeddedResource(string resourceName)
{
var resource = typeof(Transform)
.Assembly.GetManifestResourceStream
(resourceName);
return new XmlTextReader(resource);
}

private static XmlTextWriter ToXmlTextWriter(string fileName)
{
return new XmlTextWriter(fileName, Encoding.UTF8);
}

这在程序上有效。但是,XSLT 中的脚本(即 VBScript)不能很好地与 .NET 配合使用。具体来说,我有一个段:

dim gRegEx
set gRegEx = New RegExp

炸弹转换为:

Type 'RegExp' is not defined.

有很多文章介绍如何将其转换为 .NET 对象,但这需要返回到需要 VBScript 的旧机器上。

我如何编写它才能在两种环境中工作?

最佳答案

避免使用 XslCompiledTransform 的最简单方法。而是使用 COM-Interop 来使用 MSXML3 或 MSXML6 来执行转换。这样,当在经典 ASP 中执行转换时,托管在 .NET 中执行的转换更有可能执行相同的操作。

编辑:

例子。

创建 Windows 控制台 C# 项目

添加对 COM 组件名称“Microsoft XML,v3.0”的引用。

包含这段代码:-

class Program
{
static void Main(string[] args)
{
try
{
var dom = new MSXML2.DOMDocument30();
dom.async = false;
dom.load(args[0]);

var xslt = new MSXML2.DOMDocument30();
xslt.async = false;
xslt.load(args[1]);

File.WriteAllText(args[2], dom.transformNode(xslt));

Console.WriteLine("Done");

}
finally
{
Console.ReadKey();
}
}

}

现在在项目属性调试选项卡中添加三个命令行参数,输入 XML 的文件路径,转换它的 XSLT 文件和输出文件路径。

您现在可以将其合并到一个更大的 .NET 项目中,该项目可以使用专为 ASP Classis 使用而设计的 XSL 和/或包含旧版 MS 脚本代码的 XSL。

关于c# - 在 .NET 中使用 asp 对象 - 最大兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10126541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com