2009-11-10 5 views
0

У меня есть 3 XSL файлы, которые имеют пути в них что-то вроде C: \ шаблоны \ Test \ file.pdfDynamic XSL файл

Этот путь не всегда будет такой же, и вместо того, чтобы его трудно закодированный в XSL, мне бы хотелось, чтобы путь C: \ templates \ test \ был заменен тегом [BASEPATH] и когда я читал в файле xsl объект XSLTransform (да, я знаю, что он устарел, я может одновременно перейти к XSLCompiledTransform), я бы хотел, чтобы тег [BASEPATH] был заменен абсолютным файловым пути веб-папки (или Server.MapPath ("~"), видя, что он находится в .net)

Я думал, что смогу создать страницу aspx XSLLoader, которая берет имя файла XSL t через строку запроса, а затем возвращает файл XSL через xml content-type. Когда я пытаюсь это сделать, я получаю ошибку 503, хотя я не уверен, что вы можете передавать URL-адреса, подобные этому, в метод XSLTransform.Load.

Любые идеи, что делать?

+0

Что это с XSL-FO? – Boldewyn

+0

Это часть XSL - использование ее для сделать PDF. Не знаете, есть ли способ использовать относительный путь для указания внешней графики в XSL-FO? – Graeme

ответ

1

Вы посмотрели параметры XSL?

<xsl:param name="basepath" select="'C:\Users\Graeme\'" /> 

<xsl:value-of select="document(concat($basepath, 'test.pdf'))" /> 

Тогда у большинства достойных двигателей XSLT есть способ установить параметр уровня корня извне.

+0

Спасибо, вот как я ушел - теперь переменная используется, просто нужно выяснить, как установить параметр корневого уровня из C#. – Graeme

+0

Отлично, теперь это работает - спасибо - передать аргументы в C# в устаревший объект XslTransform, вы делаете следующее: XsltArgumentList xslArg = new XsltArgumentList(); xslArg.AddParam («день», «», день); xslArg.AddParam («год», «год»); xslArg.AddParam («погода», «», погода); XslTransform xslt = new XslTransform(); xslt.Load (stylesheet); XPathDocument xpathdocument = новый XPathDocument (имя файла); XmlTextWriter writer = новый XmlTextWriter ("priceClassExample.html", null); xslt.Transform (xpathdocument, xslArg, writer); writer.Close(); – Graeme

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