撒克逊.Net转型

时间:2015-10-27 09:45:54

标签: c# .net xslt saxon

也许这是一个愚蠢的问题,但就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 );
  }

2 个答案:

答案 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。