也许这是一个愚蠢的问题,但就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 );
}
答案 0 :(得分:0)
我需要测试它是100%确定它有效,但我认为你应该能够做到
processor.setProperty("http://saxon.sf.net/feature/xinclude-aware", "true")
答案 1 :(得分:0)
我尝试设置proc.Implementation.setXIncludeAware(true);
但是对于Saxon 9.6.0.7我没有用。因此,我将结果发布在https://saxonica.plan.io/boards/3/topics/6206,Saxonica创建了错误报告https://saxonica.plan.io/issues/2488,该报告稍后修复。因此,您似乎必须等到新版本中包含该修补程序才能在.NET应用程序中使用XInclude。