Отладка XSLT с объектами расширения в Visual Studio 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 ответа
Я не уверен в использовании объектов расширения, но, насколько я понимаю, ваша проблема заключается в отладке 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.
Рассмотрим отладку с использованием отладчика XML Spy XSLT. Это работает для меня все время.