2013-09-24 32 views
0

我已经写了下面的代码来获得我可以用来转换XML文档的Saxon.Api.XsltTransformer对象。 TransformationXslt是一个包含XSLT的字符串。如何将“常用”功能添加到多个XSLT文件?

XmlDocument document = new XmlDocument(); 
document.LoadXml(TransformationXslt); 
Saxon.Api.XdmNode input = processor.NewDocumentBuilder().Build(document); 
Saxon.Api.XsltCompiler xsltCompiler = processor.NewXsltCompiler(); 
Saxon.Api.XsltExecutable xsltExecutable = xsltCompiler.Compile(input); 
Saxon.Api.XsltTransformer xsltTransformer = xsltExecutable.Load(); 
xsltTransformers.Add(transformation.Name, xsltTransformer); 
return xsltTransformer; 

假设我有一打,我希望能够从任何XSLT更叫XSLT模板。我如何使它们可用于生成的Saxon.Api.XsltTransformer对象。

假设我有这样的事情:

string commonXslt = "<xsl:param name="Use_This_In_Every_Xslt">Foo!</xsl:param>"; 

我怎样才能让这个“共同” XSLT提供给变压器?

回答

1

与XSLT通常的方法是不依赖于XSLT处理器API来编写样式表模块,而你把你的代码样式表(例如module1.xsl),然后您可以加入或使用xsl:includexsl:import其他样式表导入。有关详细信息,请参阅http://www.w3.org/TR/xslt20/#combining-modules。但是,您需要确保您的模块是一个完整的格式良好的XSLT文档,而不是一个xsl:param元素。

当然,如果所有XSLT只在内存中作为字符串提供,那么您需要确保为您的XsltCompiler设置http://www.saxonica.com/documentation/dotnetdoc/Saxon/Api/XsltCompiler.html#XmlResolver解析相对URL以从字符串加载另一个模块。