2012-06-20 1 views
0

Я использую XSLT 1.0 и C# 2.0. и я хочу кэшировать загруженный документ, так что всякий раз, когда будет вызываться следующая страница, он должен использовать кэш-документ, а не загружать его снова.Как кэшировать xml-документ в xslt 1.0

Вот часть XSLT, где я получаю физический путь от C# в парах sitespath, я знаю, что может кэшировать этот документ с помощью C#, но я искал кэш загруженный документ в XSLT 1.0

Sample Код:

<xsl:param name="sitespath"/> 
<xsl:variable name="siteInfoPath" select="document($sitespath)/sitedata/region/site/language"/> 

Теперь я хочу, чтобы кэшировать siteInfoPath переменными так, чтобы каждый не загружать его в качестве документа, он будет первым проверить кэшированное переменные попытаться загрузить из кэша еще будет загружаться снова.

Возможно ли это?

Пожалуйста, предложите !!

Спасибо.

ответ

0

Я не думаю, что вы можете кэшировать результат функции document() в xslt для нескольких преобразований. Функция document() оценивается во время выполнения. Однако вы можете кэшировать документ в своих программах C# и передавать его преобразованию в качестве внешнего параметра (вам, вероятно, придется передать XPathNavigator, см. Документацию XsltArgumentList.AddParam здесь http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addparam.aspx для получения дополнительной информации).

+0

Thanks Pawel, На самом деле это уже было, но оно будет опубликовано в нашем следующем выпуске, но я искал короткое решение, чтобы до следующего продвижения. Если мы сможем это сделать на уровне xslt, это позволит избежать продвижения –

+0

Как я уже сказал, метод document() оценивается во время выполнения. Вы можете использовать глобальную переменную для кэширования узлов для одного преобразования, но не для нескольких (и несвязанных преобразований). Вы можете думать об этом как о своей программе на C#. Если вы установите переменную в 5, завершите процесс и запустите приложение снова, переменная не будет равна 5, если вы не установите ее снова. – Pawel