Хранение XSLT в SQL Server 2005 с типом xml?

Ожидайте несколько месяцев Изучение направляющих Simon St. Laurent, Edd Dumbill для выхода в ноябре. Тот ряд книг является громадным, и эта книга будет касаться последней версии направляющих.

8
задан Jeff Meatball Yang 4 December 2009 в 21:57
поделиться

2 ответа

Две большие проблемы, которые я вижу:

  1. Мы используем много включений, чтобы гарантировать, что мы делаем что-то только один раз, хранение XSLT в базе данных не позволит нам сделать это.
  2. Это делает обновление XSL более интересным - мы были вполне счастливы сбрасывать новые файлы .xsl на развернутые сайты, не выполняя полное обновление сайта. В этом отношении у нас есть фрагменты кода, которые ищут специфичный для клиента xsl в папке, и эти фрагменты кода могут возвращаться к общему коду (шаблонам) в корне, поэтому я вообще не уверен в том, что такое повторное развертывание , но это будет во многом зависеть от конкретного варианта использования, ваш, безусловно, отличается от нашего.

С точки зрения доступа к диску, хм ... база данных все равно должна получить доступ к диску для получения данных, и если вы ' Если говорить о кешировании, то база данных не является требованием для включения кеширования.

3
ответ дан 5 December 2019 в 22:19
поделиться

Я храню XSLT в базе данных моего приложения dbscript . (Однако я храню их в столбце NVARCHAR, поскольку он также работает на SQL Server 2000)

Поскольку пользователи могут редактировать свои XSLT, мне нужно было написать собственный валидатор, который загружает текст TextBox в объект .Net XslCompiledTransform вот так:

    args.IsValid = true;

    if (args.Value.Trim() == "")
        return;

    try
    {
        System.IO.TextReader rd = new System.IO.StringReader(args.Value);
        System.Xml.XmlReader xrd = System.Xml.XmlReader.Create(rd);
        System.Xml.Xsl.XslCompiledTransform xslt = new System.Xml.Xsl.XslCompiledTransform();
        System.Xml.Xsl.XsltSettings xslts = new System.Xml.Xsl.XsltSettings(false, false);
        xslt.Load(xrd, xslts, new System.Xml.XmlUrlResolver());
        xrd.Close();
    }
    catch (Exception ex)
    {
        this.ErrorMessage = (string.IsNullOrEmpty(sErrorMessage) ? "" : (sErrorMessage + "<br/>") +
            ex.Message);
        if (ex.InnerException != null)
        {
            ex = ex.InnerException;
            this.ErrorMessage += "<br />" + ex.Message;
        }
        args.IsValid = false;
    }

Что касается ваших замечаний:

  • файловый ввод-вывод будет заменен дисковым вводом-выводом, созданным базой данных, так что никаких преимуществ при развертывании

  • изменений для предоставления сценария INSERT / UPDATE, содержащего новые данные

3
ответ дан 5 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: