使用 XSLT 版本 2 进行 XML 转换
本文关键字:XML 转换 进行 XSLT 版本 使用 | 更新日期: 2023-09-27 17:56:53
我正在尝试使用 XSLT 版本 2.0 转换 XML,但出现以下异常:
找不到与命名空间"http://www.w3.org/2001/XMLSchema"关联的脚本或扩展对象。
后来我才知道Microsoft不支持XSLT版本2.0。请参阅链接。它建议使用一些第三方工具。但是这些工具需要支付一些相关的许可费。有没有类似的免费软件可用?
[编辑]
我尝试使用撒克逊人
public static void Func( string xsltFile,string inputFile, string outputFile)
{
var xslt = new FileInfo(xsltFile);
var input = new FileInfo(inputFile);
var output = new FileInfo(outputFile);
// Compile stylesheet
var processor = new Processor(false);
var compiler = processor.NewXsltCompiler();
var executable = compiler.Compile(new Uri(xslt.FullName));
// Do transformation to a destination
var destination = new DomDestination();
using (var inputStream = input.OpenRead())
{
var transformer = executable.Load();
transformer.SetInputStream(inputStream, new Uri(input.DirectoryName));
transformer.Run(destination);
}
destination.XmlDocument.Save(output.FullName);
}
在最后一条语句上给出空引用异常是行不通的。实际上是目的地。XmlDocument 正在获取空值。
我认为如果您想简单地将转换结果创建为文件,那么您不需要 DomDestination,您可以使用序列化程序,如
static void Main(string[] args)
{
TestTransform("XSLTFile1.xslt", "XMLFile1.xml", "Result1.xml");
}
public static void TestTransform(string xsltFile, string inputFile, string outputFile)
{
var xslt = new FileInfo(xsltFile);
var input = new FileInfo(inputFile);
var output = new FileInfo(outputFile);
// Compile stylesheet
var processor = new Processor(false);
var compiler = processor.NewXsltCompiler();
var executable = compiler.Compile(new Uri(xslt.FullName));
using (var inputStream = input.OpenRead())
{
var transformer = executable.Load();
transformer.SetInputStream(inputStream, new Uri(input.DirectoryName));
var serializer = new Serializer();
using (var resultStream = output.OpenWrite())
{
serializer.SetOutputStream(resultStream);
transformer.Run(serializer);
}
}
}
}