Я в настоящее время работаю над проектом, который включает много преобразований XSLT, и мне действительно нужен отладчик (у меня есть XSLTs, которые являются 1000 + строки долго, и я не записал им :-).
Проект записан в C# и использует дополнительные объекты:
xslArg.AddExtensionObject("urn:", new ());
От моего знания, в этой Visual Studio ситуации единственный инструмент, который может помочь мне отладить пошаговые преобразования. Статический отладчик бесполезен из-за дополнительных объектов (он бросает ошибку, когда он достигает элементов, которые ссылаются на их пространство имен). К счастью, я нашел этот поток, который дал мне начальную точку (по крайней мере, я знаю, что он может быть сделан).
После поиска MSDN я нашел критерии, который превращает продвижение в возможное преобразование. Они перечислены здесь. Короче говоря:
IXmlLineInfo
интерфейс (XmlReader
И co.)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
Я не уверен в использовании объектов расширения, но, как я понимаю, ваша проблема связана с отладкой 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();
}
К сожалению, есть ошибка в отладчике XSLT в VS2010, которая сделает ваш опыт отладки хуже, чем в VS2008.
Рассмотрите возможность отладки с помощью отладчика XML Spy XSLT. У меня это работает постоянно.