2013-09-24 2 views
0

Я написал следующий код, чтобы получить объект Saxon.Api.XsltTransformer, который я могу использовать для преобразования XML-документа. 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:include или xsl:import. См. http://www.w3.org/TR/xslt20/#combining-modules. Однако вам необходимо убедиться, что ваш модуль представляет собой полный, хорошо сформированный документ XSLT, а не один элемент xsl:param.

Конечно, если у вас есть все XSLT, доступные только в памяти в виде строк, вам необходимо убедиться, что http://www.saxonica.com/documentation/dotnetdoc/Saxon/Api/XsltCompiler.html#XmlResolver, который вы настроили для своего XsltCompiler, разрешает относительный URL-адрес для загрузки другого модуля из строки.

 Смежные вопросы

  • Нет связанных вопросов^_^