我正在尝试使用XSLT版本2.0转换XML,但是得到以下异常:
找不到与命名空间关联的脚本或扩展程序对象' http://www.w3.org/2001/XMLSchema'。
后来我才知道微软并不支持XSLT 2.0版。 请参阅link。它建议使用一些第三方工具。但这些工具有一些许可费用。有没有类似的免费软件?
[编辑]
我试图使用SaxonHe
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);
}
它无法在最后一个语句中提供空引用异常。实际上,destination.XmlDocument正在获取空值。
答案 0 :(得分:0)
我认为如果您想简单地将转换结果创建为文件,那么您不需要DomDestination,您可以使用Serializer,如
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);
}
}
}
}