Отладка XSLT с объектами расширения в Visual Studio 2010 - PullRequest
11 голосов
/ 21 мая 2010

В настоящее время я работаю над проектом, который включает в себя множество преобразований XSLT, и мне действительно нужен отладчик (у меня есть XSLT длиной более 1000 строк, и я их не писал :-).

Проект написан на C # и использует объекты расширения:

xslArg.AddExtensionObject("urn:<obj>", new <Obj>());

Насколько мне известно, в этой ситуации Visual Studio - единственный инструмент, который может помочь мне отладить этап преобразований.ий шаг.Статический отладчик бесполезен из-за объектов расширения (он выдает ошибку, когда достигает элементов, которые ссылаются на их пространство имен).К счастью, я нашел эту ветку , которая дала мне отправную точку (по крайней мере, я знаю, что это можно сделать).

После поиска в MSDN я нашел критерии, которые делают шаг впреобразование возможно.Они перечислены здесь .Вкратце:

  • XML и XSLT должны быть загружены через класс, имеющий интерфейс IXmlLineInfo (XmlReader & co.)
  • распознаватель XML, используемый вXSLTCompiledTransform конструктор основан на файлах (XmlUriResolver должен работать).
  • таблица стилей должна быть на локальном компьютере или в интрасети (?)

Из того, что я могускажите, я соответствую всем этим критериям, но это все еще не работает.Соответствующие примеры кода размещены ниже:

// [...]

xslTransform = new XslCompiledTransform(true);

xslTransform.Load(XmlReader.Create(new StringReader(contents)), null, new BaseUriXmlResolver(xslLocalPath));

// [...]

// I already had the xml loaded in an xmlDocument 
// so I have to convert to an XmlReader
XmlTextReader r = new XmlTextReader(new StringReader(xmlDoc.OuterXml));

XsltArgumentList xslArg = new XsltArgumentList();
xslArg.AddExtensionObject("urn:[...]", new [...]());
xslTransform.Transform(r, xslArg, context.Response.Output);

Я действительно не понимаю, что я делаю неправильно.Я проверил интерфейсы на обоих XmlReader объектах, и они реализуют требуемый.Кроме того, BaseUriXmlResolver наследуется от XmlUriResolver, и таблица стилей хранится локально.Снимок экрана ниже - это то, что я получаю при входе в функцию Transform.Сначала я вижу код таблицы стилей после перехода по параметрам (при сопоставлении с шаблоном) и получаю следующее:

Ошибка, возникающая при входе в таблицу стилей http://img339.imageshack.us/img339/4153/scrxslterror.jpg

Если кто-либоУ меня есть идеи, почему он не работает или у него есть альтернативный способ заставить его работать. Я был бы очень благодарен:).

Спасибо,
Alex

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

Я не уверен насчет использования объектов расширения, но, насколько я понимаю, ваша проблема в отладке преобразования XSLT в коде в VS2010. Вот функция, которую мы используем для отладки XSLT-преобразования:

 public string ApplyTransformation(string inputFilePath, string xsltFileContent)
    {
        XslCompiledTransform transform = new XslCompiledTransform(debugEnabled);

        File.WriteAllText(xsltTempFilePath,xsltFileContent);
        transform.Load(xsltTempFilePath, XsltSettings.TrustedXslt, new XmlUrlResolver());

        XmlReader reader = XmlReader.Create(inputFilePath);
        StringWriter output = new StringWriter();
        XmlWriter writer =  XmlWriter.Create(output,transform.OutputSettings);
        transform.Transform(reader,writer);
        return output.ToString();
    }

К сожалению, есть ошибка с отладчиком VS2010 XSLT, которая сделает ваш отладочный процесс хуже, чем в VS2008.

0 голосов
/ 29 июня 2010

Рассмотрите возможность отладки с использованием отладчика XML Spy XSLT. У меня все время работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...