VBScriptを組み込んだレガシーXSLTスクリプトがいくつかあります。それらは古いシステムで実行されており、そのシステムを変更することはできません。
ファイルを別の方法で変換するには、XSLTに変更を加える必要があります。
XSLT変換をテストするための単純な.NETプロジェクトを作成しました。
[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);
}
これは、手続き的に機能します。ただし、VBScriptであるXSLTのスクリプトは、.NETではうまく機能していません。具体的には、次のセグメントがあります。
dim gRegEx
set gRegEx = New RegExp
これは、変換を次のように爆撃します。
Type 'RegExp' is not defined.
これを.NETオブジェクトに変換する方法については多くの記事がありますが、これはVBScriptを期待するレガシーマシンに戻す必要があります。
両方の環境で機能するようにこれを作成するにはどうすればよいですか?