【发布时间】:2015-10-27 09:45:53
【问题描述】:
也许这是一个愚蠢的问题,但我是 XSL 的新手。
我正在使用这个命令行来执行一个效果很好的转换:
transform.exe -s: source.xml -xsl:rules.xsl -o: output.xml -xi:on
我试图从 c# 中获得相同的结果,但输出文件为空。 “-xi”参数的等价物是什么?
谢谢。
Uri xslUri = new Uri(@"rules.xsl");
Uri inputUri = new Uri(@"source.xml");
Uri outputUri = new Uri(@"toc.hhc");
// Compile stylesheet
try
{
Processor processor = new Processor();
XdmNode input = processor.NewDocumentBuilder().Build(inputUri);
XsltCompiler compiler = processor.NewXsltCompiler();
XsltExecutable exec = compiler.Compile(xslUri);
XsltTransformer transformer = exec.Load();
transformer.InitialContextNode = input;
// Create a serializer
Serializer serializer = new Serializer();
FileStream fs = new FileStream(outputUri.AbsolutePath, FileMode.Create, FileAccess.Write);
serializer.SetOutputStream( fs );
// Transform the source XML to System.out.
transformer.Run( serializer );
}
catch( Exception e )
{
Console.WriteLine( e.Message );
}
【问题讨论】:
-
文档 saxonica.com/html/documentation/sourcedocs/XInclude.html 说“在 .NET 平台上,有一个自定义的 XmlReader 执行 XInclude 处理,位于 xmlmvp.org/xinclude/index.html。您可以将其作为参数提供给方法 Build(XmlReader parser) 在 .NET Saxon API 的 DocumentBuilder 类中。”。然而,xmlmvp.org 早已消失。我不确定还有哪些其他选项。