В настоящее время я работаю над проектом, который включает в себя множество XSLT-преобразований, и мне действительно нужен отладчик (у меня есть XSLT, длина которых 1000+, и я их не писал :-).
Проект написан на С# и использует объекты расширения:
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
. Сначала я могу увидеть код таблицы стилей после перехода по параметрам (при сопоставлении с шаблоном), я получаю следующее:
Если у кого-то есть идеи, почему он не работает или у него есть альтернативный способ заставить его работать, я был бы очень признателен :).
Спасибо,
Alex